Vba 为图表选择动态数据范围

Vba 为图表选择动态数据范围,vba,excel,Vba,Excel,我有一个Excel工作簿,其中包含多个工作表。对于每个工作表,我希望根据指定的数据范围生成图表。图表数据的列将始终相同,但是某些工作表将包含比其他工作表更多的数据行。当只有一个工作表时,我现在拥有的代码似乎工作正常,但当我有多个工作表时,它并不总是选择正确的数据范围。我是VBA的新手,因此任何帮助和建议都将不胜感激。提前谢谢 Dim Wb As Workbook Dim Ws As Worksheet Dim Cht As Chart Set Wb = Workbooks.Open(File

我有一个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
之后

For Each Ws In Wb.Worksheets  
加一行

Set Ws = ActiveSheet

Range(…)
更改为
Ws.Range(…)
。顺便说一句,使用
xlDown
是不可靠的。最好使用
xlUp
。有关更多详细信息,请参阅此链接:在一张图纸上设置4个范围,然后覆盖它们,以便在最后一张图纸上显示所有4个范围sheet@simoco更改为Ws.Range时出现“工作表的方法范围失败”错误。@Steven Martin我怀疑您是对的,因为我似乎正在为上一个工作表选择数据范围。我该如何纠正这一点?@simoco谢谢你的解决方案成功了!