использование массива для пропуска указанных c листов - PullRequest
0 голосов
/ 24 января 2020

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


Dim ws As Worksheet
Dim a As Long
Dim wsname As Variant

wsname = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5")

For a = LBound(wsname) To UBound(wsname)
    wsname(a) = ActiveSheet.Name
    Sheets(ActiveSheet.Index + 1).Activate
Next a

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Этот код будет go проходить через листы в массиве и перечислять имя каждого листа в окне «Немедленное окно», если только это не ActiveSheet во время выполнения кода.

Dim Ws As Worksheet
Dim a As Long
Dim WsName As Variant

WsName = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5")

For a = LBound(WsName) To UBound(WsName)
    Set Ws = Worksheets(WsName(a))
    If Not Ws Is ActiveSheet Then
        Debug.Print Ws.Name
    End If
Next a

Если лист не ' t существует, и ошибка произойдет.

1 голос
/ 24 января 2020

Если вам нужно go через ваш массив, я бы предложил что-то вроде:

For Each ws In ThisWorkbook.Worksheets(wsname)

Или даже напрямую:

For Each ws In ThisWorkbook.Worksheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5"))

Это может выглядеть так:

Sub Test()

Dim ws As Worksheet
Dim wsname As Variant: wsname = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5")

For Each ws In ThisWorkbook.Worksheets(wsname)
    If Not ws Is ActiveSheet Then
        'Do Something
    End If
Next ws

End Sub

Однако, работа с ActiveSheet.Activate в вашем исходном посте) вряд ли когда-либо понадобится, и никогда не рекомендуется!

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