For 循环下界和上界

问题描述

我有一个关于使用下限和上限的 For 循环的问题。宏的目标是从多个工作表复制数据并粘贴到另一个工作簿中。 用户在单元格 B3 中输入边界作为下限,在 C3 作为上限。 如果 B3 = 4C3=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 = 4hi = 6,则循环的第一次迭代有效:

Worksheets(4).Activate

激活左起第 4 个工作表。您想要的是有效的:

Worksheets("4").Activate

所以你需要:

Worksheets("" & sheetlist(x)).Activate

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...