从多个工作簿添加系列

时间:2018-03-22 03:00:52

标签: vba excel-vba excel

以下代码用于在打开的工作簿中添加图表。图表数据系列值取自每个工作簿内的工作表(1)" InputPathName"目录使用循环。然后我应用保存在" TemplatePath"的模板图。出现两个问题:

  1. 系列名称不具有单元格B7的值。我尝试了两种方法,但没有奏效(标记为:ATTEMPT 1& 2)

  2. 目录的一些工作簿" InputPathName"有多个工作表。如果工作表(1)以外的任何工作表处于活动状态,则会出现运行时错误' 1004'方法'范围'对象' _Worksheet'失败(突出显示的行:设置xRange = ...)。如果我在设置ws = ....之后添加ws.Activate(如注释掉的那样),图表将变得一团糟,并且不会显示正确的结果。 注意:如果每个工作簿中的活动工作表都是工作表(1),则代码运行良好。

  3. 开发:如何在不知道工作表数量的情况下在工作簿的每个工作表中循环?

    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
    

2 个答案:

答案 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