以下代码用于在打开的工作簿中添加图表。图表数据系列值取自每个工作簿内的工作表(1)" InputPathName"目录使用循环。然后我应用保存在" TemplatePath"的模板图。出现两个问题:
系列名称不具有单元格B7的值。我尝试了两种方法,但没有奏效(标记为:ATTEMPT 1& 2)
目录的一些工作簿" InputPathName"有多个工作表。如果工作表(1)以外的任何工作表处于活动状态,则会出现运行时错误' 1004'方法'范围'对象' _Worksheet'失败(突出显示的行:设置xRange = ...)。如果我在设置ws = ....之后添加ws.Activate(如注释掉的那样),图表将变得一团糟,并且不会显示正确的结果。 注意:如果每个工作簿中的活动工作表都是工作表(1),则代码运行良好。
开发:如何在不知道工作表数量的情况下在工作簿的每个工作表中循环?
Sub InputFromOtherWorksheets()
Dim ch As Chart
Dim ws As Worksheet
Dim wb As Workbook
Dim xRange As Range
Dim yRange As Range
Dim TemplatePath As String
Dim TemplateName As String
Dim InputPathName As String
Dim InputFileName As String
TemplatePath = "C:\Charts"
TemplateName = "templ4"
InputPathName = "C:\New folder\"
Set ch = Charts.Add2
InputFileName = Dir(InputPathName)
Do While InputFileName <> ""
Set wb = Workbooks.Open(InputPathName & InputFileName)
Set ws = wb.Worksheets(1)
'ws.Activate
Set xRange = ws.Range("B18", Range("B18").End(xlDown))
Set yRange = ws.Range("C18", Range("C18").End(xlDown))
With ch.SeriesCollection.NewSeries
.Name = ws.Range("B7") 'ATTEMPT 1
.XValues = xRange
.Values = yRange
End With
ch.SeriesCollection(1).Name = ws.Range("B7") 'ATTEMPT 2
wb.Close SaveChanges:=False
InputFileName = Dir()
Loop
ch.ApplyChartTemplate TemplatePath & "\" & TemplateName
ch.ChartTitle.Text = "Specimen 1"
End Sub
答案 0 :(得分:0)
尝试以下代码:
With ch.SeriesCollection.NewSeries
.Name = "=" & ws.Range("B7").Address(False, False, xlA1, xlExternal)
' rest of your code
End With
答案 1 :(得分:0)
要遍历工作簿的每个工作表,您必须使用Worksheets
集合。我们假设我们在Workbook
变量中设置了wb
个对象:
Dim ws As Worksheet
' some code
For Each ws in wb.Worksheets
' do some operations on ws object
Next