使用 VBA 的动态图

Dynamic graph using VBA

我有以下 table of SKUVolume (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。