-1

私はコーディングが初めてです。シート内のチャートを検索し、チャートにファイザーのデータがあるかどうかを検索し、チャート内でそれらを青に変更するマクロを作成しようとしていました。ここでは、データラベルにファイザーが含まれているかどうかを検索し、テキストを青に変更しようとしています。このコードを使用してみましたが、うまくいきませんでした:-

Public Sub chartFormatting()

Dim CTRYname As String
Dim p As Integer
ivalue As String
Dim l As Integer
Dim rownum As Integer

For p = 1 To 13
    CTRYname = ThisWorkbook.Sheets("Country lookup").Range("A1").Offset(p, 0).Value
    rownum = wkbCurr.Sheets(CTRYname).Range("AA25").End(xlDown).Row
    For s = 1 To rownum
        ivalue = wkbCurr.Sheets(CTRYname).Charts(1).SeriesCollection(1).Points(s).DataLabel.Text
        If InStr(ivalue, "Pfizer") <> 0 Then
            With ivalue
                With .Font
                    .Color = -65536
                    .TintAndShade = 0
                 End With
            End With
            wkbCurr.Sheets(CTRYname).Charts(1).SeriesCollection(1).Points(s).DataLabel.Text = ivalue
        End If
    Next s
Next p
End Sub

変数は他の場所でも宣言されています。現在、多くのエラーが表示されています。チャートのテキストと線をフォーマットするより良い方法を助け、提案してください。

私の主な課題は、ファイザーが存在する場合にのみフォーマットすることです。

4

1 に答える 1

0

ここでの問題の根本は、Chart オブジェクト階層をナビゲートすることです。それを理解する良い方法は、マクロレコーダーを使用して、コーディングしたいアクションを記録することです(この場合はラベルに色を付けます)、記録されたオブジェクトを調べます。Selectレコーダーが行うすべてのマラーキーを無視して、記録されたオブジェクトの核心に到達する必要があります。

この手法を使用して、コードをリファクタリングしました。また、オブジェクト モデルを分解するために、中間オブジェクト ( 、この場合は )も使用shします。chrtdl

Public Sub chartFormatting()
    Dim CTRYname As String
    Dim p As Integer
    Dim ivalue As String
    Dim l As Integer
    Dim rownum As Integer
    Dim s As Long

    Dim dl As DataLabel
    Dim chrt As Chart
    Dim sh As Worksheet

    For p = 1 To 13
        CTRYname = ThisWorkbook.Sheets("Country lookup").Range("A1").Offset(p, 0).Value
        Set sh = wkbCurr.Worksheets(CTRYname)
        rownum = sh.Range("AA25").End(xlDown).Row
        Set chrt = sh.ChartObjects(1).Chart
        For s = 1 To rownum
            With sh.ChartObjects(1).Chart.SeriesCollection(1).Points(s).DataLabel
                If InStr(.Text, "Pfizer") <> 0 Then
                    With .Format.TextFrame2.TextRange.Font.Fill.ForeColor
                        .SchemeColor = 4
                        .TintAndShade = 0
                    End With
                End If
            End With
        Next s
    Next p
End Sub
于 2012-09-20T08:11:38.607 に答える