Я могу запустить макрос на отдельных листах, но не на всех открытых листах.

Я хочу запустить этот макрос на 700 листах. Мы пытаемся удалить один столбец.

Sub RunMacroOnAllSheetsToRight()
    For i = ActiveSheet.Index To Sheets.Count
        Call MyFunction(i)
    Next i
End Sub

Function MyFunction(i)
    'Code goes here

    Dim lColumn As Long
    Dim iCntr As Long
    lColumn = 5
    'For Each ws In ThisWorkbook.Worksheets

    'For iCntr = lColumn To 1 Step -1
        If IsNumeric(Cells(1, lColumn)) Then
            Columns(lColumn).Delete
        End If
    'Next ws

    MsgBox "I'm currently on sheet " & ThisWorkbook.Sheets(i).Name
End Function

1 ответ1

0

Я изменил MyFunction, чтобы он работал:

Function MyFunction(i)
    'Code goes here
    Dim wkb As Workbook
    Dim wks As Worksheet
    Set wkb = ThisWorkbook
    Set wks = wkb.Sheets(i)
    Dim lColumn As Long
    Dim iCntr As Long
    lColumn = 5
    'For Each ws In ThisWorkbook.Worksheets

    'For iCntr = lColumn To 1 Step -1
        wks.Activate
        If IsNumeric(wks.Cells(1, lColumn)) Then
            wks.Range(Cells(1, lColumn), Cells(1, lColumn)).EntireColumn.Delete
        End If
    'Next ws

    MsgBox "I'm currently on sheet " & ThisWorkbook.Sheets(i).Name
    Set wks = Nothing
    Set wkb = Nothing
End Function

Я добавил переменные wkb и wks соответствующие рабочей книге и рабочему листу. Используя эти переменные, легко обратиться к ячейкам рабочего листа и удалить нужный столбец.

Если вам нужно выполнить более 700 листов, вам нужно удалить MessageBox. Кроме того, отключение и включение ScreenUpdating сделает его работу быстрее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .