使用UNION的VBA图表宏范围-错误 [英] VBA Chart Macro Range Using Union - Error
本文介绍了使用UNION的VBA图表宏范围-错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用宏创建散点图,该宏使用不相邻列中的数据。一旦这是有效的,我想添加更多的系列到图表,跨列,但我不能让第一部分工作。这是我的代码:
Sub Better_Chart()
Dim chtChart As Chart
Dim X As Integer
Dim Y As Integer
Dim Z As Integer
'For X = Range("E1").Column To Range("K1").Column Step 6
X = Range("E1").Column
Z = Range("C1").Column
Cells(14, X).Select
Range(Selection, Selection.End(xlDown)).Select
If Range("E14") <> Empty Then
Y = Selection.Rows.Count + 13
End If
'Create a new chart.
Set chtChart = Charts.Add
Set chtChart = chtChart.Location(Where:=xlLocationAsObject, Name:="Yield Data")
With chtChart
'.Name = ""
.ChartType = xlXYScatter
'Link to the source data range.
' .SetSourceData Source:=Sheets("Yield Data").Range(Cells(14, Z), Cells(Y, X)),
.SetSourceData Source:=Sheets("Yield Data").Union(Range(Cells(14, X), Cells(Y, X)), Range(Cells(14, Z), Cells(Y, Z))), _
PlotBy:=xlColumns
' Next Y
'Next X
.HasTitle = True
.ChartTitle.Text = Range("H3")
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Range("H5")
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Range("H7")
End With
End Sub
我在setSourceDate行上收到调试错误。但是,此代码工作得很好,因为它选择了我想要绘制图形的确切数据:
Public Sub Test_Union()
Dim chtChart As Chart
Dim X As Integer
Dim Y As Integer
Dim Z As Integer
'For X = Range("E1").Column To Range("K1").Column Step 6
X = Range("E1").Column
Z = Range("C1").Column
Cells(14, X).Select
Range(Selection, Selection.End(xlDown)).Select
If Range("E14") <> Empty Then
Y = Selection.Rows.Count + 13
End If
'Range(Cells(14, Z), Cells(Y, X)).Select
Union(Range(Cells(14, Z), Cells(Y, Z)), Range(Cells(14, X), Cells(Y, X))).Select
'Range(Cells(14, Z), Cells(Y, X)).Select
' Next Y
'Next X
End Sub
有人看到我做错了什么吗?
推荐答案
.SetSourceData Sheets("Yield Data").Union(Range(Cells(14, X), ...
如果Sheets("Yield Data")
不是ActiveSheet
,则该Union-from-a-very-specific-sheet
调用中的所有这些未限定的Range
和Cells
调用都试图合并不同工作表中的范围,这将失败并返回错误1004。
最佳解决方案是限定要使用的工作表的所有引用:
Set sh = ActiveWorkbook.Worksheets("Yield Data")
.SetSourceData sh.Union(sh.Range(sh.Cells(14, X), ...
另一种"解决方案"(实际上是变通办法)是将该工作表设置为:
ActiveWorkbook.Worksheets("Yield Data").Activate
.SetSourceData Union(Range(Cells(14, X), ...
但要编写可靠的代码,您确实应该避免Select
和Activate
,因此使用适当限定的Worksheet
成员调用-包括您的"运行良好"代码,它也隐含地引用ActiveSheet
是什么,但只涉及该表。
这篇关于使用UNION的VBA图表宏范围-错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文