2009-05-28 34 views

Trả lời

6

Đó là một cách hơi hacky để làm điều đó vì nó dựa vào khi thiết lập "On Error Resume Next", nhưng bạn có thể làm một cái gì đó như thế này:

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 

Các cuộc gọi đến GetRef sẽ tạo ra một ngoại lệ nếu sub hoặc chức năng bạn đang cố gắng để có được một con trỏ không tồn tại (như là trường hợp ở đây với DoStuff2). Sau đó, bạn có thể kiểm tra xem tham chiếu đã được đặt như mong đợi chưa.

+0

Nếu bạn đang vào kiểm tra Err.Number sau khi cố gắng gọi hàm. Nhưng sau đó chức năng bạn đang gọi có thể được xác định, được gọi, nhưng là nguồn gốc của lỗi, mà tôi đoán không phải là những gì bạn muốn. – Xiaofu

+0

Điều đó có hiệu quả. Cảm ơn! –

15

Đây là giải pháp của tôi mà hoạt động trên nguyên tắc tương tự, nhưng hacky-Ness là khá khép kín:

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

Vâng - đó là những gì tôi đã làm với nó. :-) –

+1

Bạn có thể đơn giản hóa điều này thành 'FunctionExists = (Err.Number = 0)' để đặt 'Boolean'. – Lankymart

+0

@Lankymart, không hoạt động tương tự. Không chắc tại sao không. –

Các vấn đề liên quan