我有这个代码,并且我在同一行上不断收到属性/方法错误。见下文。我很确定这是在我继续完全运行代码之前需要注意的最后一个问题之一。任何和所有的帮助非常感谢。
"卷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
答案 0 :(得分:2)
ThisWorkbook.Sheets("Volume CT")
是Chart
个对象。 Chart
对象没有.Chart
成员。
如果查看 Project Explorer ,您将在 Microsoft Excel对象下看到所有工作表(和图表)以及ThisWorkbook
。
而不是访问ThisWorkbook.Sheets
集合并对您执行Object
时使用的隐式Sheets.Item
getter返回的某些.Sheets("Volume CT")
进行后期处理, >使用图表对象本身 - 已经是对它的全局引用,可以使用了:
给它一个有意义的名字......
...然后使用它:
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
瞧!