我对VBA很新。我编写了一个宏,在从数据库电子表格中过滤和剪切一些数据后,创建了大约10个数据透视图和一些普通图表。我现在想写一个子程序,通过对每个子程序应用相同的格式。子如下:
Sub FormatChart(Cht As ChartObject, title As String)
Cht.Activate
MsgBox ActiveChart.SeriesCollection.Count
With ActiveChart
.HasTitle = True
.ChartTitle.Text = title
.Axes(xlValue).HasMajorGridlines = False
End With
ActiveChart.SeriesCollection(1).Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 182, 0)
End With
End Sub
我原本没有包含所有的激活和选择,但是没有它们就无法让宏工作,并且不会将它视为世界末日 - 数据集永远不会变得庞大所以速度不高这么多问题,我禁用了屏幕更新,这样用户就无法点击单元格/其他对象,并在运行时破坏宏。
这是我的问题。如果我取出第二个With循环,一切都会完美地进行,并删除网格线并添加标题。但是,每当我尝试用上面的方法编辑列的颜色时,我得到运行时错误'1004':参数无效。我也尝试将第二个内容保留在第一个循环中,然后将其移出以尝试使用选择来查看它是否有所作为。
我已经摆弄了很多并记录了各种宏来改变相关图表的颜色,但我认为问题可能与引用SeriesCollection有关,就像我尝试使用
进行调试一样MsgBox ActiveChart.SeriesCollection.Count
我得到“0”。
如果我错过了这一点,请告诉我 - 因为我说我是VBA的新手并且我正在努力学习:)
编辑:解决方案是我在创建图表之后,但在为图表设置数据源之前,将每个图表传递给上面的子图表。卫生署!
这显然意味着该图表没有seriesCollections,因此我得到了错误。
我将Joehannah标记为回答问题(即使它在技术上不是解决方案),因为它让我检查了我的代码并注意到上述情况可能导致问题 - 如果我不应该那样做,请告诉我我会尽力解决它!
答案 0 :(得分:0)
最好为每个图表使用Set cht = (create chart object)
,然后立即调用传入cht
的格式方法。
答案 1 :(得分:0)
我被告知要发布自己的答案,因为我发现了这个问题。
我正在创建它之后将每个图表传递给此函数,如下所示:
Set ptr1 = Sheets("withinBRSPivots").PivotTables("UniqueClicks").TableRange1
Set cht1 = Sheets("BRS Overview").ChartObjects.Add(Left:=950, Top:=500, _
Width:=400, Height:=300)
cht1.Name = "UCChart"
Charter.FormatChart cht1, "Average Number of Unqique Clicks"
然后我在完成上述操作后设置了图表的源数据。这意味着当图表传递给我的chartformat子图时,它没有源数据。这导致能够编辑标题和网格线,但不能编辑seriesCollection。解决方法是在设置源数据之后将FormatChart子行移动到。
非常感谢发布答案的每个人!