【发布时间】:2025-11-26 04:30:01
【问题描述】:
我有一个包含多个工作表的 Excel 工作簿。对于每个工作表,我想根据指定的数据范围生成图表。图表数据的列将始终相同,但某些工作表将包含比其他工作表更多的数据行。当只有一个工作表时,我目前拥有的代码似乎可以正常工作,但是当我有多个工作表时,它并不总是选择正确的数据范围。我是 VBA 新手,因此我们将不胜感激任何帮助和建议。提前致谢!
Dim Wb As Workbook
Dim Ws As Worksheet
Dim Cht As Chart
Set Wb = Workbooks.Open(Filename:=Application.GetOpenFilename)
For Each Ws In Wb.Worksheets
Dim MyRange1 As String
Dim MyRange2 As String
Dim MyRange3 As String
Dim MyRange4 As String
MyRange1 = Range([O1], [O1].End(xlDown)).Address
MyRange2 = Range([Q1], [Q1].End(xlDown)).Address
MyRange3 = Range([R1], [R1].End(xlDown)).Address
MyRange4 = Range([S1], [S1].End(xlDown)).Address
MyString1 = MyRange1 & "," & MyRange2
MyString2 = MyRange3 & "," & MyRange4
MyChtRange = MyString1 & "," & MyString2
Set Cht = Ws.Shapes.AddChart.Chart
Cht.SetSourceData Source:=Ws.Range(MyChtRange)
Cht.ChartType = xlColumnStacked
Next Ws
【问题讨论】:
-
将
Range(...)更改为Ws.Range(...)。顺便说一句,使用xlDown是不可靠的。最好使用xlUp。有关详细信息,请参阅此链接:How to determine last used row/column -
您在一张纸上设置 4 个范围,然后覆盖它们,以便所有 4 个范围都在最后一张纸上
-
@simoco 更改为 Ws.Range 给我一个“工作表的方法范围失败”错误。
-
@Steven Martin 我怀疑你是对的,因为我似乎正在为上一个工作表选择数据范围。我该如何纠正这个问题?
-
@simoco 感谢您的解决方案成功了!