循环通过不同的床单

时间:2016-04-14 12:30:18

标签: vba excel-vba excel

感谢您对我正在努力创建的宏的帮助。

我有一个带有一堆工作表的xls文件,其中一些名为“1”,“2”,“3”,依此类推。我想创建一个只通过那些'数字命名的'工作表循环的宏,因此不是根据下面代码中的索引。 (工作表“1”不是工作簿中的第一个工作表)。在循环之前,我需要定义单元格范围和工作表。

以下是我的(错误的)尝试。

Sub Refresh ()

Dim i As Integer
Dim rng As Range
Set rng = Range("A10:TZ180")

 For i = 1 To 30

  Sheets(i).Activate
  rng.Select       
  rng.ClearContents
  Application.Run macro:="xxx"

 Next i

End Sub

3 个答案:

答案 0 :(得分:5)

dim w as worksheet
for each w in activeworkbook.worksheets
  if isnumeric(w.name) then
    w.range("A10:TZ180").clearcontents
    xxx()
  end if
next

答案 1 :(得分:0)

如果宏“xxx()”需要选定范围,则只需添加一个select语句。 (借用GSerg)

Dim w As Worksheet
For Each w In ActiveWorkbook.Worksheets
  If IsNumeric(w.Name) Then
    w.Range("A10:TZ180").ClearContents
    w.Range("A10:TZ180").Select
    Application.Run macro:="xxx"
  End If
Next

要清除您对分配范围的误解,请参阅以下内容:

Sub Refresh()
    Dim ws As Worksheet
    Dim rng As Range
    Dim i As Integer

    For Each ws In ActiveWorkbook.Worksheets
        If IsNumeric(ws.Name) Then

            'you must activate the worksheet before selecting a range on it
            ws.Activate

            'note the qualifier: ws.range()
            Set rng = ws.Range("A10:TZ180")

            'since the range is on the active sheet, we can select it
            rng.Select
            rng.ClearContents
            Application.Run macro:="xxx"
        End If
    Next

End Sub

Sub test2()
    Dim ws As Worksheet
    Dim rg As Range

    Dim arrSheets As Variant
    arrSheets = Array("Sheet1", "Sheet2", "Sheet3")

    Dim x As Long
    For x = LBound(arrSheets) To UBound(arrSheets)
        Set ws = Worksheets(arrSheets(x))
        ws.Activate

        '...

    Next
End Sub

Sub test3()
    Dim ws As Worksheet

    Dim x As Long
    For x = 1 To 20
        Set ws = Worksheets(CStr(x))
        ws.Activate

        '...

    Next
End Sub

答案 2 :(得分:0)

试试这个

Sub main()
Dim shtNames As Variant, shtName As Variant

shtNames = Array(1, 2, 3, 4) '<== put your actual sheets "number name"

For Each shtName In shtNames
    With Worksheets(CStr(shtName))
        .Range("A10:TZ180").ClearContents
        .Range("A10:TZ180").Select
        Application.Run macro:="MacroToRun"
    End With
Next shtName

End Sub


Sub MacroToRun()

MsgBox "hello from cells '" & Selection.Address & "' in sheet '" & ActiveCell.Parent.Name & "'"
End Sub