-1

我是编码新手。我试图制作一个宏来搜索工作表中的图表,搜索图表是否有辉瑞的任何数据,然后将图表中的数据更改为蓝色。所以在这里,我试图搜索 datalabel 是否有辉瑞,然后将文本更改为蓝色。我尝试使用此代码但没有用:-

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

您的问题的根源是导航图表对象层次结构。我发现一个很好的方法是使用宏记录器来记录您想要编码的动作(在这种情况下为标签着色)并检查记录的对象。您只需要忽略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 回答