TLDR; Bạn có thểCall
nó, nhưng chỉ rõ ràng từ mô-đun VBA.
Khi tài liệu được liên kết bởi @ Gary'sStudent (see the application agnostic version here) chỉ ra, DoEvents
thực sự là một không Function
một Sub
, và nó sẽ luôn luôn trở về 0 trong VBA. Trong Visual Basic không được lưu trữ (tức là VB6), nó trả về tổng số cửa sổ đang mở. Suy đoán hoàn toàn không được chứng minh của tôi là lý do tại sao nó trả về 0 là trong VBA cửa sổ cấp cao nhất của quá trình mà mã đang chạy không thuộc sở hữu của mã bạn đang thực hiện.
Chức năng chính nó là trong module VBA.Interaction
, như bạn có thể nhìn thấy trong Object Browser:
Điều đó nói rằng, bạn nên lưu ý rằng bạn thể sử dụng DoEvents
chức năng trước bởi các Call
từ khóa - nhưng bạn cần tham chiếu rõ ràng cụm từ VBA
:
Sub Example()
'This is perfectly fine.
Call VBA.DoEvents
End Sub
Một lần nữa, đây chỉ là suy đoán, nhưng tôi nghi ngờ lý do phải làm với việc thực hiện nội bộ. Thông thường sẽ gọi hàm SwitchToThread (mà vbe7.dll nhập). Nhưng bản chất của giá trị trả lại chỉ để liệt kê các cửa sổ được mang lại đến, do đó, có thể chỉ cần một tay cầm để VBA
để chạy. Không có bất cứ điều gì trong typelib cho thấy nó khác nhau từ bất kỳ chức năng khác trong module Tương tác (mặc dù có thể có một lá cờ mà tôi bị mất ở đâu đó):
[entry(598), helpcontext(0x000f7900)]
short _stdcall DoEvents();
Bản chất của lỗi biên dịch "Dự kiến: số nhận dạng" cho biết có nội dung nào đó "ẩn" DoEvents
từ các hàm VBA có thể truy cập toàn cầu.
Cuối cùng lưu ý: Cú pháp Call Foo
là hoàn toàn không cần thiết - tất cả nó được loại bỏ một cách rõ ràng giá trị trả về của một hàm.Không phải chỉ định giá trị trả lại thực hiện chính xác điều tương tự.
Tôi không nghĩ bạn có thể gọi bất kỳ thành viên nào của Lớp Tương tác VBA (Environ, MsgBox, v.v.) –
@JiminyCricket 'Gọi MsgBox (" Test ", vbOKOnly)' chắc chắn hoạt động. 'DoEvents' là lần đầu tiên (chức năng?) Tôi stumbeled khi đó đã không cho phép tôi để' Call' nó – Mafii
Ahh, tôi đã cố gắng sử dụng nó như là một cuộc gọi phụ MsgBox "Test" không hoạt động. Tốt nhất là không sử dụng Gọi và chỉ cần sử dụng DoEvents. Tôi sử dụng điều đó như là thực hành chung cho tất cả các chương trình con và chức năng khi nó cắt giảm code/visual clutter –