由网友(相逢何必曾相识)分享简介:我正在尝试使用宏创建散点图,该宏使用不相邻列中的数据。一旦这是有效的,我想添加更多的系列到图表,跨列,但我不能让第一部分工作。这是我的代码:Sub Better_Chart()Dim chtChart As ChartDim X As IntegerDim Y As IntegerDim Z As Integer'Fo...![一个提高筛选效率的VBA宏](https://p.xsw88.cn/allimgs/daicuo/20230903/2080.png)
我正在尝试使用宏创建散点图,该宏使用不相邻列中的数据。一旦这是有效的,我想添加更多的系列到图表,跨列,但我不能让第一部分工作。这是我的代码:
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
![一个提高筛选效率的VBA宏](https://p.xsw88.cn/allimgs/daicuo/20230903/2080.png)
有人看到我做错了什么吗?
推荐答案
.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
是什么,但只涉及该表。
相关推荐
最新文章