【问题标题】:For Loop Lower and Upper BoundsFor 循环下限和上限
【发布时间】:2021-02-09 22:29:31
【问题描述】:

我收到了一个关于使用下限和上限使用 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

【问题讨论】:

    标签: excel for-loop lower-bound upperbound


    【解决方案1】:

    你的数组包含数字,所以如果lo = 4hi = 6,那么你的循环的第一次迭代是有效的:

    Worksheets(4).Activate
    

    它激活了从左边算起的第四张纸。你想要的是有效的:

    Worksheets("4").Activate
    

    所以你需要:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多