【问题标题】:Loop through selected Excel worksheets循环浏览选定的 Excel 工作表
【发布时间】:2017-11-11 21:28:04
【问题描述】:

在单个 Excel 工作簿中,我想选择各种工作表来运行 VBA 子例程。我找到了显示如何遍历选定工作表的代码,它使用“MsgBox sh.Name”;但是,当我将代码放入其中时,它只会影响所选的最后一张工作表。

例如,如果我选择 Sheet1、Sheet2 和 Sheet3(按此顺序),它只会对 Sheet3 进行更改。下面是我的代码的简化示例。我只能选择最后一张将“123”分配给单元格 A1 的工作表。

Sub SimplifiedExample()

    Dim sh As Worksheet
    Dim selectedshs As Object
    Set selectedshs = ActiveWindow.SelectedSheets
    For Each sh In selectedshs
        'MsgBox sh.Name
         Range("A1") = 123
    Next sh

End Sub

下面是我试图循环的代码。如果它通过测试,它会将行添加到数据列表中。该代码一次只适用于一张。

Sub LoopingWorksheets()

    Dim sh As Worksheet
    Dim selectedshs As Object

    Set selectedshs = ActiveWindow.SelectedSheets

    For Each sh In selectedshs

        Do While Application.WorksheetFunction.Max(Range("A:A")) < Range("Z2")

            ActiveSheet.Range("A50000").Select
            Selection.End(xlUp).Select
            Selection.EntireRow.Insert
            ActiveCell.Offset(-1, 0).Rows("1:1").EntireRow.Select
            Selection.Copy
            ActiveCell.Offset(1, 0).Range("A1:A2").Select
            ActiveSheet.Paste
            Application.CutCopyMode = False
            Range("A1").Select

        Loop

    Next sh

End Sub

【问题讨论】:

标签: vba excel


【解决方案1】:

您将 Range 对象默认为活动工作表(我推断这是您所指的“最后一张工作表”)。

Dim sh As Worksheet
Dim selectedshs As Object
Set selectedshs = ActiveWindow.SelectedSheets
For Each sh In selectedshs
    with sh
        debug.print .Name
        .Range("A1") = 123
    end with
Next sh

如果您要循环浏览 ActiveWindow.SelectedSheets,那么您不妨在循环浏览它们时实际使用每个 sh。

【讨论】:

  • 我可以让简化的例子工作;但是,当我的真实代码(见上文)被插入时,它仍然不会对所有工作表进行排序。还有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 2014-12-23
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多