问题描述
我有一个关于使用下限和上限的 For 循环的问题。宏的目标是从多个工作表复制数据并粘贴到另一个工作簿中。 用户在单元格 B3 中输入边界作为下限,在 C3 作为上限。 如果 B3 = 4 和 C3=6 我希望代码循环遍历 sheets: 4,5,6。 工作表仅以数字命名。 “4”被标记为“4”而不是“Sheet4”。
这就是我卡住的地方。 如果我在下面的行中使用数组命令定义 LB 和 UB,则通过 FOR 循环运行没有问题。
sheetlist = Array("4","5","6")
但是,如果我尝试使用下面的代码中的 lo & hi 。宏跳转到最后一张纸
"Truck Log-East Gate-January.xlsx"
与工作表名称无关。
就像 Worksheets(sheetlist(X)).Activate
没有中断下限和上限,而只是跳到最后一张纸。
Sub Refresh()
Dim lo As Long: lo = ActiveSheet.Range("B3")
Dim hi As Long: hi = ActiveSheet.Range("C3")
Dim sheetlist: sheetlist = Application.Transpose(Evaluate("row(" & lo & ":" & hi & ")"))
Debug.Print "~~> " & Join(sheetlist,","),_
vbNewLine & "Boundaries: " & LBound(sheetlist) & " To " & UBound(sheetlist)
'Loop Through sheetlist
For X = LBound(sheetlist) To UBound(sheetlist)
Windows("Truck Log-East Gate-January.xlsx").Activate
Worksheets(sheetlist(X)).Activate
Range("A4:R4").Select
Range(Selection,Selection.End(xlDown)).Select
Selection.copy
Windows("Truck Racks RawData.xlsm").Activate
Sheets("RawDataMacro").Select
Range("A" & Rows.Count).End(xlUp).Select ' starts from the bottom of the worksheet and finds the last cell with data
ActiveCell.Offset(1).Select ' moves cursor down one cell
Selection.PasteSpecial Paste:=xlPasteValues,Operation:=xlNone,SkipBlanks _
:=False,Transpose:=False
Next X
解决方法
您的数组包含数字,因此如果 lo = 4
和 hi = 6
,则循环的第一次迭代有效:
Worksheets(4).Activate
激活左起第 4 个工作表。您想要的是有效的:
Worksheets("4").Activate
所以你需要:
Worksheets("" & sheetlist(x)).Activate