В MainSub
вы определяете tab_names As Variant
, в то время как параметр HideTabs
ожидается как ws_names() as Variant
.
Один - это Variant
, который может храниться (среди всех других простых типов и объектов) массив, в то время как другой является Variant Array
, который может хранить Variants
(каждый из которых может хранить массив по очереди).
Таким образом, в действительности вы пытаетесь передать скаляр в качестве параметра, гдеожидается массив.
Чтобы исправить ваш код, убедитесь, что оба объявления используют один и тот же тип (Variant Array
, поскольку неявный массив в «скаляре» Variant
, кажется, не может использоваться с For Each
).
Public Sub MainSub()
Dim tab_names() As Variant
tab_names = Array("Sheet2", "Sheet3")
HideTabs tab_names ' "Call" is obsolete. Don't use it.
End Sub
Public Sub HideTabs(ByVal ws_names() As Variant)
Dim ws_name As Variant
For Each ws_name In ws_names()
ThisWorkbook.Worksheets(ws_name).Visible = False
Next ws_name
End Sub
Как указано в QHarr's answer круглые скобки не требуются - они будут работать без них.Однако вы избавляетесь от необходимости проверять аргумент Variant
для содержащегося в нем массива, если вам напрямую требуется массив.