将Excel工作表引用从数字序列更改为工作表名称

时间:2019-01-16 13:24:52

标签: excel vba object-reference

我有一个相对简单的问题。目前,我有一些运行良好但效率不高的代码。我有大约500个成本中心,每个成本中心都有自己的工作簿,这些工作簿已经合并到一个中央存储库中(在下面的代码中引用-Wb2)。代码副本从每个打开的模板(Wb1)到我的合并(Wb2)。下面的示例代码(无需完整代码)。

Option Explicit

Sub CopyData()
    Dim Wb1 As Workbook, wb2 As Workbook, wB As Workbook
    Dim rngToCopy1 As Range
    Dim rngToCopy2 As Range
    Dim rngToCopy3 As Range
    Dim rngToCopy4 As Range
    Dim rngToCopy5 As Range
    Set wb2 = ThisWorkbook
    Application.Calculation = xlManual

    For Each wB In Application.Workbooks
        If Not Left(wB.Name, 18) = "Consolidation Test" Then
            Set Wb1 = wB
            Exit For
        End If
    Next

    'Forecast Data
    With Wb1.Sheets(1)
        Set rngToCopy1 = .Range("A11:O11", .Cells(.Rows.Count, "A").End(xlUp))
    End With
    wb2.Sheets(7).Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy1.Rows.Count, 15).Value = rngToCopy1.Value
    wb2.Sheets(7).Range("P" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy1.Rows.Count).Value = Sheets(3).Range("J1").Value

我试图简单地将示例wB2.Sheets(7)更改为Wb2.Sheets("Forecast_Data")以及VBE wB2.Sheets("Sheet4")中的原始名称,但是下标超出范围错误?

除了解决方案之外,还请提供背景说明为什么修复不是那么简单,它与声明变量的方式有关吗?

1 个答案:

答案 0 :(得分:0)

我认为@GSerg已经为您提供了最重要的提示。

我假设您创建了一个名为WB2的工作簿,但其中不包含您要写入的工作表。

要么在模板(WB2)中手动创建它们,要么查看How to Add a Named Sheet at the end of all excel sheets以使用VBA创建它们。