Вы инициируете массив, содержащий 4 ссылки на объекты.Эти 4 значения ссылок на объекты копируются из a, b, c и d.
Затем вы передаете этот вновь созданный массив в вашу функцию NothingifyObjects.NothingifyObjects берет ваш вновь созданный массив и перебирает его, устанавливая для каждого элемента в массиве значение «Nothing».Это не повлияет на ваши 4 локальные переменные в области действия Subroutine1, однако, так как Array содержит только копии a, b, c и d.
Вы можете изменить свой код на это:
Sub Subroutine1
Set a = CreateObject("Somthing")
Set b = CreateObject("SomthingElse")
Set c = CreateObject("SomthingOther")
Set d = CreateObject("Another")
' Some operation done with those objects
Call NothingifyObjects(a, b, c, d)
If a Is Nothing Then
MsgBox "Yes"
Else
MsgBox "No"
End If
End Sub
Function NothingifyObjects(a, b, c, d)
Set a = Nothing
Set b = Nothing
Set c = Nothing
Set d = Nothing
End Function
Это будет работать, так как VBScript по умолчанию пройдет ByRef.
Если вы действительно просто хотите уменьшить количество строк кода, все, что я могу думать, это:
Function NothingifyObjects(a, b, c, d)
Set a = Nothing : Set b = Nothing : Set c = Nothing : Set d = Nothing
End Function
... который будет работать, хотя, может быть, и не так привлекательно.
VBscript не поддерживает необязательные аргументы, поэтому вы должны установить предварительно определенное количество аргументов для своей функции.В противном случае вы могли бы сделать что-то похожее на то, что вы предлагаете.
Если бы это был я, я бы просто вставил утверждение Set to Nothing так:
Sub Subroutine1
Set a = CreateObject("VBScript.RegExp")
Set b = CreateObject("VBScript.RegExp")
Set c = CreateObject("VBScript.RegExp")
Set d = CreateObject("VBScript.RegExp")
' Some operation done with those objects
Set a = Nothing
Set b = Nothing
Set c = Nothing
Set d = Nothing
If a Is Nothing Then
MsgBox "Yes"
Else
MsgBox "No"
End If
End Sub