我有一个程序可以创建一个新工作表,将数据添加到该工作表,它应该做的最后一部分是输出的图表。当我尝试下面的代码时,我得到"对象或变量或者没有设置块变量"
请让我知道我哪里出错了。谢谢。
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("J2", Sheets(ws.Name).Range("L2").End(xlDown).Address)
ActiveChart.ChartType = xlLine
With ActiveChart.Parent
.Height = 400
.Width = 800
End With
Next
答案 0 :(得分:0)
您正在使用逗号来创建包含字符串的范围。这仅适用于范围对象。尝试:
ActiveChart.SetSourceData Source:=ws.Range("J2:" & ws.Range("L2").End((xlDown).Address)
答案 1 :(得分:0)
With ws.ChartObjects.Add(Left:=100, Width:=375, Top:=75, Height:=225)
.Chart.SetSourceData Source:=ws.Range("J2", Sheets(ws.Name).Range("L2").End(xlDown).Address)
.Chart.ChartType = xlLine
End With
答案 2 :(得分:0)
vba中的很多对象访问器返回变量。 如果您遇到此问题,例如chart.parent //返回变量btw 首先要尝试将其分配给一个类型变量 在运行时,如果将变量处理为不同的类型,则几乎肯定会遇到运行时错误。
dim ws As Worksheet
set ws = ActiveChart.Parent
With ws
'ws operations here
.Name = "My worksheet!"
.Cells(1,1).Value = "cell A1"
End With
值得注意的是,Workbook.Worksheets集合还包含图表对象http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.worksheets.aspx
因此,当您添加图表时,您实际上是在添加到正在迭代的集合中,而不建议使用该工作表。
答案 3 :(得分:0)
更改为:
ActiveChart.SetSourceData Source:= Range(Sheets(ws.Name).Range(" J2"),Sheets(ws.Name).Range(" L2")。End (xlDown))