VBA: цикл, используемый для массива, дает ошибку - PullRequest
0 голосов
/ 27 сентября 2018

Этот следующий код выдает ошибку «Для каждой переменной управления в массивах должен быть вариант».Но ws_names это массив вариантов, если я не ошибаюсь.Может кто-нибудь объяснить, пожалуйста?Спасибо!

Public Sub test12()
    Dim ws_names() As Variant
    ws_names = Array("Sheet2", "Sheet3")
    Dim ws_name As String
    For Each ws_name In ws_names()
        ThisWorkbook.Worksheets(ws_name).Visible = False
    Next ws_name
End Sub

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Попробуйте этот кусок кода

Public Sub test12()

    Dim ws_names() As Variant
    ws_names = Array("Sheet2", "Sheet3")
    Dim ws_name As Variant
    For Each ws_name In ws_names()
        'ThisWorkbook.Worksheets(ws_name).Visible = False
        Debug.Print ws_name
    Next ws_name

End Sub
0 голосов
/ 27 сентября 2018

Синтаксис цикла For Each ... Next * : Для каждого элемента в group ... Next element

Для коллекций элемент может быть только переменной Variant, универсальной переменной объекта или любой конкретной переменной объекта. Для массивов элемент может быть только переменной Variant.

Таким образом, будет работать следующее:

Public Sub test12()
    Dim ws_names() As Variant
    ws_names = Array("Sheet2", "Sheet3")
    Dim ws_name As Variant
    For Each ws_name In ws_names()
        ThisWorkbook.Worksheets(ws_name).Visible = False
    Next ws_name
End Sub

Однако, как указал @GMalc вих ответ, цикл даже не нужен для этого.

0 голосов
/ 27 сентября 2018

Вам не нужно перебирать массив

Dim ws_names() As Variant
ws_names = Array("Sheet2", "Sheet3")

Sheets(ws_names).Visible = False

Вы также можете использовать один вкладыш

Sheets(Array("Sheet2", "Sheet3")).Visible = False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...