Từ MSDN:
Bạn không cần phải sử dụng từ khóa Gọi khi gọi một thủ tục. Tuy nhiên, nếu bạn sử dụng từ khóa Gọi để gọi thủ tục yêu cầu đối số, danh sách đối số phải là được đính kèm trong dấu ngoặc đơn. Nếu bạn bỏ qua từ khóa Cuộc gọi, bạn cũng phải bỏ qua dấu ngoặc đơn xung quanh danh sách đối số. Nếu bạn sử dụng Cú pháp cuộc gọi để gọi bất kỳ hàm nội tại hoặc người dùng nào được xác định , giá trị trả lại của hàm sẽ bị hủy.
Ví dụ:
Sub Proc1()
Debug.Print "Hello World"
End Sub
Sub Proc2(text As String)
Debug.Print "Hello " & text
End Sub
Trong cửa sổ ngay lập tức, nếu bạn nhập
Proc1
sau đó "Hello World" in. Nếu bạn nhập
Call Proc1
thì in "Hello World". Nếu bạn nhập
Proc2 "World"
thì in "Hello World". Nếu bạn nhập
Call Proc2 "World"
bạn nhận được lỗi biên dịch. Bạn sẽ phải nhập
Call Proc2("World")
Nguồn
2009-01-26 14:11:35
Hai là không tương đương. Trong trường hợp đầu tiên, kèm theo các đối số trong parens gây ra nó để được đánh giá, và kết quả của việc đánh giá thông qua: trong bản chất, bạn đang đi qua một bản sao của "a", không phải là "a" chính nó. Điều này được thực hiện rõ ràng bởi trình phân tích cú pháp. Khi bạn nhập Test (a) và rời khỏi dòng, trình phân tích cú pháp sẽ thêm một khoảng trắng, làm cho nó kiểm tra (a) để chỉ ra rằng đó là một biểu thức; trong khi với Kiểm tra cuộc gọi (a) không có không gian sẽ được thêm vào - bạn đang chuyển "a" trực tiếp. Xem câu trả lời của Patrick Cuff ở trên để tham khảo tài liệu. –
Thật vậy, và thực sự nhận được kết quả (ví dụ, 'MsgBox Test (a)') khôi phục sự tương đương. – Ant