excel VBA - L oop массива - PullRequest
       2

excel VBA - L oop массива

0 голосов
/ 28 февраля 2020

Я сделал этот простой код или, по крайней мере, попробовал. Но у меня есть одна маленькая проблема.

Когда я печатаю For I = 14 To 25, я действительно не знаю, что делаю. У меня есть лист с именем «Мастер», и в диапазоне K6:V6 у меня есть каждое имя каждого листа, через который я хочу go. Я хотел бы написать что-то вроде этого: For I = sheets("Master").range("K6:V6") Но это не работает, кто-нибудь, кто может помочь мне назначить мне "имена" в этом массиве?

Остальной код работает должным образом, его можно было бы оптимизировать, если бы не было «select», но я, похоже, не смог этого сделать, поэтому я выбрал легкий путь. Спасибо за вашу помощь!

Dim I As Integer
For I = 14 To 25
If Sheets(I).Visible = False Then
    'If sheet = Not visble
    '-----------------------------------------------------------------------------------------------------
    Sheets(I).Visible = True
    AA = Sheets("Master").Range("K6").Value
    Sheets(AA).Select
    ActiveSheet.Unprotect
    ActiveSheet.Range("C3:C120").Copy
    Range("G3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("C6:C120").ClearContents
    ActiveSheet.Range("L6:M117").ClearContents
    ActiveSheet.Protect
    Range("A1").Select
    Sheets(I).Visible = False

    '-----------------------------------------------------------------------------------------------------

    Else:
    'If sheet = visble
    '-----------------------------------------------------------------------------------------------------
    AA = Sheets("Master").Range("K6").Value
    Sheets(AA).Select
    ActiveSheet.Unprotect
    ActiveSheet.Range("C3:C120").Copy
    Range("G3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    ActiveSheet.Range("C6:C120").ClearContents
    ActiveSheet.Range("L6:M117").ClearContents
    ActiveSheet.Protect
    Range("A1").Select
    '-----------------------------------------------------------------------------------------------------

End If
Next I

1 Ответ

1 голос
/ 28 февраля 2020

Каждый Worksheet в файле содержится в коллекции Worksheets. Вы можете посмотреть на каждый лист в коллекции по очереди и действовать по нему.

Sub Test()

    Dim wrkSht As Worksheet
    Dim shtMaster As Worksheet
    Dim InList As Range
    Dim VisibleSetting As Long

    Set shtMaster = ThisWorkbook.Worksheets("Master") 'Reference to Master worksheet

    'This will look at each worksheet in the worksheets collection and reference it with 'wrkSht'
    For Each wrkSht In ThisWorkbook.Worksheets
        'Look for the worksheet name in the K6:V6 range.
        Set InList = shtMaster.Range("K6:V6").Find(wrkSht.Name, LookIn:=xlValues, LookAt:=xlWhole)

        'If the name is found InList will not be nothing.
        If Not InList Is Nothing Then
            With wrkSht
                VisibleSetting = .Visible 'Remember the visible setting.
                .Visible = xlSheetVisible
                .Unprotect
                .Range("C3:C120").Copy
                .Range("G3").PasteSpecial xlPasteValues
                Union(.Range("C3:C120"), .Range("L6:M17")).ClearContents
                .Visible = VisibleSetting 'Put the visible setting back.
                .Protect
            End With
        End If
    Next wrkSht

End Sub

Дополнительная литература:
ThisWorkbook
С ... Конец с оператором
Для каждого ... Далее Заявление

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...