VBA - цикл для стандартизации заголовка в некоторых таблицах, но пропустить некоторые - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь просмотреть 11 из 13 листов, которые есть в моей книге, чтобы стандартизировать некоторые заголовки столбцов. При запуске макроса изменения вносятся только в текущий активный лист.

Я попытался поместить оператор if с именами листов, которые нужно опустить. Это то, что у меня есть

Sub Set_Headings()
    Dim ws As Worksheet
    'loop through each sheet in the workbook except for "Main" and "Overall" and standardize column headers'
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "Main" And ws.Name <> "Overall" Then
            Range("B2").Value = "Active / Days Off / Holidays/ Training / MOD / LOA"
            Range("E2").Value = "Active / Days Off / Holidays/ Training / MOD / LOA"
            Range("H2").Value = "Active / Days Off / Holidays/ Training / MOD / LOA"
            Range("K2").Value = "Active / Days Off / Holidays/ Training / MOD / LOA"
            Range("C2").Value = "Unit / Notes"
            Range("F2").Value = "Unit / Notes"
            Range("I2").Value = "Unit / Notes"
            Range("L2").Value = "Unit / Notes"
            Range("G2").Value = "Drivers"
        End If
    Next ws
End Sub

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

1 Ответ

0 голосов
/ 27 июня 2019

По умолчанию, если вы не указали явно, какой лист вы хотели бы использовать с вашим Range, тогда он по умолчанию будет иметь текущее значение ActiveSheet.

В примере, использующем одну из ваших строк,быть ws.Range("L2").Value = "Unit / Notes".

Как указано @BruceWayne, использование оператора With сделает ваш код более читабельным, исключив повторяющиеся уточняющие выражения.

Sub Set_Headings()
    'loop through each sheet in the workbook except for "Main" and "Overall" and standardize column headers'
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        With ws
            If .Name <> "Main" And .Name <> "Overall" Then
                .Range("B2").Value = "Active / Days Off / Holidays/ Training / MOD / LOA"
                .Range("E2").Value = "Active / Days Off / Holidays/ Training / MOD / LOA"
                .Range("H2").Value = "Active / Days Off / Holidays/ Training / MOD / LOA"
                .Range("K2").Value = "Active / Days Off / Holidays/ Training / MOD / LOA"
                .Range("C2").Value = "Unit / Notes"
                .Range("F2").Value = "Unit / Notes"
                .Range("I2").Value = "Unit / Notes"
                .Range("L2").Value = "Unit / Notes"
                .Range("G2").Value = "Drivers"
            End If
        End With
    Next ws
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...