我有一个相对简单的问题。目前,我有一些运行良好但效率不高的代码。我有大约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")
中的原始名称,但是下标超出范围错误?
除了解决方案之外,还请提供背景说明为什么修复不是那么简单,它与声明变量的方式有关吗?
答案 0 :(得分:0)
我认为@GSerg已经为您提供了最重要的提示。
我假设您创建了一个名为WB2的工作簿,但其中不包含您要写入的工作表。
要么在模板(WB2)中手动创建它们,要么查看How to Add a Named Sheet at the end of all excel sheets以使用VBA创建它们。