使用UNION的VBA图表宏范围-错误 [英] VBA Chart Macro Range Using Union - Error

查看:0
本文介绍了使用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调用中的所有这些未限定的RangeCells调用都试图合并不同工作表中的范围,这将失败并返回错误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), ...

但要编写可靠的代码,您确实应该避免SelectActivate,因此使用适当限定的Worksheet成员调用-包括您的"运行良好"代码,它也隐含地引用ActiveSheet是什么,但只涉及该表。

这篇关于使用UNION的VBA图表宏范围-错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆