2009-05-28 2 views

ответ

6

Это немного Hacky способ сделать это, поскольку это зависит от того, установлен «On Error Resume Next», но вы могли бы сделать что-то вроде этого:

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 будет генерировать, если исключение sub или функция, которую вы пытаетесь получить указатель, не существует (как в случае с DoStuff2). Затем вы можете проверить, была ли ссылка задана как ожидалось.

+0

В противном случае вы в проверке err.number после попытки вызвать функцию. Но тогда функция, которую вы вызываете, может быть определена, получить вызов, но быть источником ошибки, которая, я думаю, не то, что вы хотите. – Xiaofu

+0

Это работает. Благодаря! –

15

Вот мое решение, которое работает по тому же принципу, но Hacky-Несс довольно самодостаточным:

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 
+2

Да, это я и сделал с этим. :-) –

+1

Вы можете упростить это для 'FunctionExists = (Err.Number = 0)', чтобы установить 'Boolean'. – Lankymart

+0

@ Lankymart, не работает. Не знаю, почему нет. –

Смежные вопросы