使用 VBA 的动态图
Dynamic graph using VBA
我有以下 table of SKU
和 Volume
(E4:F10)
SKU
Volume
a
10
b
20
c
30
d
40
e
50
f
60
我需要根据这些数据制作图表,行数由 E2 中的数字确定。例如,如果 E2 中的数字是 4,那么我的图表应该只有最多 c.
的 SKU。
我的代码如下:
Sub selectVar()
Dim x As Integer
x = Range("f1").Value
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=Range("E4" & ":" & "F" & x)
End Sub
但是我得到一个错误:
Run-time error '1004'
Method 'Range' of object'_Global' failed
为什么会出现这个错误?
我重新创建了您显示的数据和 运行 您的代码。我得到了同样的错误。在抛出错误时单击“调试”按钮后,我被定向到行 ActiveChart.SetSourceData Source:=Range("E4" & ":" & "F" & x)
。这条线是第一个要检查的地方。我可以看到使用了变量x
,那么它的值是多少呢? 0. 变量 x
从单元格 F1
获取其值,但该单元格中没有数据,因此它默认为值 0。因此您的代码试图设置源 运行ge 使图表成为 E4:F0
这是不可能的,因为没有单元格 F0
所以会抛出错误。
解决方案
您提到单元格 E2
应该包含您的图表将绘制的行数,因此第一件事是将 x
的来源从单元格 F1
更改为到单元格 E2
。假设 E2
的值为 4,就像您的示例中那样,那么您的代码将尝试使用的 运行ge 是 E4:F4
,这不是所需的输出。您需要 4 行数据,而不是第 4 行的单元格。请尝试使用此行来设置源数据:ActiveChart.SetSourceData Source:=Range("E4" & ":" & "F" & x + 4)
+4 被添加到 x 的值,因为 [=37 的第一行=] 在第 4 行。请注意,此处的 4 行数据 包括标题行 ,这意味着在此示例中将仅绘制数据行 5、6 和 7。
我有以下 table of SKU
和 Volume
(E4:F10)
SKU | Volume |
---|---|
a | 10 |
b | 20 |
c | 30 |
d | 40 |
e | 50 |
f | 60 |
我需要根据这些数据制作图表,行数由 E2 中的数字确定。例如,如果 E2 中的数字是 4,那么我的图表应该只有最多 c.
的 SKU。我的代码如下:
Sub selectVar()
Dim x As Integer
x = Range("f1").Value
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=Range("E4" & ":" & "F" & x)
End Sub
但是我得到一个错误:
Run-time error '1004'
Method 'Range' of object'_Global' failed
为什么会出现这个错误?
我重新创建了您显示的数据和 运行 您的代码。我得到了同样的错误。在抛出错误时单击“调试”按钮后,我被定向到行 ActiveChart.SetSourceData Source:=Range("E4" & ":" & "F" & x)
。这条线是第一个要检查的地方。我可以看到使用了变量x
,那么它的值是多少呢? 0. 变量 x
从单元格 F1
获取其值,但该单元格中没有数据,因此它默认为值 0。因此您的代码试图设置源 运行ge 使图表成为 E4:F0
这是不可能的,因为没有单元格 F0
所以会抛出错误。
解决方案
您提到单元格 E2
应该包含您的图表将绘制的行数,因此第一件事是将 x
的来源从单元格 F1
更改为到单元格 E2
。假设 E2
的值为 4,就像您的示例中那样,那么您的代码将尝试使用的 运行ge 是 E4:F4
,这不是所需的输出。您需要 4 行数据,而不是第 4 行的单元格。请尝试使用此行来设置源数据:ActiveChart.SetSourceData Source:=Range("E4" & ":" & "F" & x + 4)
+4 被添加到 x 的值,因为 [=37 的第一行=] 在第 4 行。请注意,此处的 4 行数据 包括标题行 ,这意味着在此示例中将仅绘制数据行 5、6 和 7。