纠正属性/方法错误

时间:2016-10-18 15:51:42

标签: vba methods charts properties formatting

我有这个代码,并且我在同一行上不断收到属性/方法错误。见下文。我很确定这是在我继续完全运行代码之前需要注意的最后一个问题之一。任何和所有的帮助非常感谢。

"卷CT"是ChartSheet的名称

SC2 = ActiveWorkbook.Sheets("Volume CT").SeriesCollection.Count


For i = 1 To SC2 'Run the loop for all the data series [volume]
Debug.Print SC2 'make sure program counts correct amt of series

Dim name As String
    name = .FullSeriescollection(i).name
    Debug.Print name
End With

       'Find series names and change color for solids & area RedZone1
 resultx = InStr(1, name, x, vbTextCompare)
       'x is the variable name for the "codeWord" to look for
 Debug.Print resultx
 If resultx <> 0 Then
 With ThisWorkbook.Sheets("Volume CT").Chart.SeriesCollection(i).ChartArea.Format.Fill

^^错误438:Onject不支持属性或方法

    .Visible = msoTrue
    .ForeColor.RGB = Red
    .Transparency = 0
    .Solid
End With
End If

1 个答案:

答案 0 :(得分:2)

ThisWorkbook.Sheets("Volume CT") Chart个对象。 Chart对象没有.Chart成员。

如果查看 Project Explorer ,您将在 Microsoft Excel对象下看到所有工作表(和图表)以及ThisWorkbook

而不是访问ThisWorkbook.Sheets集合并对您执行Object时使用的隐式Sheets.Item getter返回的某些.Sheets("Volume CT")进行后期处理, >使用图表对象本身 - 已经是对它的全局引用,可以使用了:

Microsoft Excel objects

给它一个有意义的名字......

Properties toolwindow

...然后使用它:

With WhateverTheChartNameIs.SeriesCollection(i).ChartArea.Format.Fill

现在,你的指令有7个点(SeriesCollection(i)隐式SeriesCollection.Item(i)),并且对于后期绑定Object来说,这是非常多的点:如果你不确定涉及的类型和成员是什么,这个错误438必然会发生。

所以你现在有一个Chart2,并且想要访问一个特定的系列; SeriesCollection.Item属性返回Object,因此在不知道属性是否确实存在的情况下,不是保留点和编写代码,而是为系列声明一个变量:

Dim s As Series
Set s = Chart2.SeriesCollection(i)

然后你可以做

With s.ChartArrea.Format.Fill

但是等等! Series没有ChartArea属性!我们到底想做什么?格式化图表的图表区域 - 为什么甚至打扰SeriesCollection呢?

With Chart2.ChartArea.Format.Fill 'notice you get IntelliSense all the way
    .Visible = msoTrue
    .ForeColor.RGB = Red
    .Transparency = 0
    .Solid
End With

瞧!