Не существует такой вещи, как интерпретируемый язык. Любой язык может быть реализован интерпретатором или компилятором. В наши дни большинство языков имеют реализации, использующие компилятор.
Тем не менее, интерпретаторы обычно работают медленнее, потому что им нужно обрабатывать язык или что-то довольно близкое к нему во время выполнения и переводить его в машинные инструкции. Компилятор выполняет этот перевод для машинных инструкций только один раз, после чего они выполняются напрямую.
Это немного хакерский способ сделать это, поскольку он полагается на установку «При ошибке возобновить следующий», но вы можете сделать что-то вроде этого:
On Error Resume Next
Dim objRef1, objRef2
Set objRef1 = GetRef("DoStuff1")
If objRef1 Is Nothing Then
Call objRef1
Else
MsgBox "DoStuff1 is not defined!"
End If
Set objRef2 = GetRef("DoStuff2")
If objRef2 Is Nothing Then
MsgBox "DoStuff2 is not defined!"
Else
Call objRef2
End If
Sub DoStuff1
MsgBox "DoStuff1!"
End Sub
Вызов GetRef вызовет исключение если подпрограмма или функция, на которую вы пытаетесь получить указатель, не существует (как в случае с DoStuff2). Затем вы можете проверить, правильно ли задана ссылка.
Вот мое решение, которое работает по тому же принципу, но хакерство довольно самодостаточно:
Function FunctionExists( func_name )
FunctionExists = False
On Error Resume Next
Dim f : Set f = GetRef(func_name)
If Err.number = 0 Then
FunctionExists = True
End If
On Error GoTo 0
End Function