VBA:用于数组的For循环给出错误

时间:2018-09-27 17:37:12

标签: excel vba excel-vba

下面的代码给我“对于数组上的每个控制变量必须为Variant”错误。但是,如果我没有记错的话,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 :(得分:3)

您不需要遍历数组

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

Sheets(ws_names).Visible = False

您也可以使用一根衬纸

Sheets(Array("Sheet2", "Sheet3")).Visible = False

答案 1 :(得分:2)

尝试这段代码

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

答案 2 :(得分:2)

For Each...Next Statement循环的语法是:对于中的每个 element ...下一个 element

  

对于集合,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在他们的答案中指出的那样,对此循环甚至没有必要。