Hi và chào mừng đến Evaluate() bí ẩn
Đánh giá() trong VBA
Các nhà phát triển tham khảo MSDN Văn phòng (2013) Tài liệu nói:
Sử dụng dấu ngoặc vuông (ví dụ, "[A1: C5]") giống hệt với cách gọi phương pháp Đánh giá bằng đối số chuỗi.
Vì vậy, tôi đã chạy một mã rất đơn giản để xem làm thế nào chính xác phương pháp Microsoft's Documentation of the Evaluate() là.
Không có gì đáng ngạc nhiên khi tôi nhận được kết quả ổn định mặc dù kỳ lạ.
lưu ý:thực hiện mỗi 4 lệnh trong Immediate Window
CTRL +G. Xem sự khác biệt trong mỗi cuộc gọi. Lưu ý rằng lỗi được tích hợp sẵn trong đó hiển thị mỗi MsgBox hai lần. Chỉ cần giữ ý nghĩ đó và không bị lẫn lộn ...
Stick mã này trong một module
Private Sub SleepESub()
Application.Wait Now + TimeValue("0:00:20")
MsgBox "w8'd "
End Sub
sau đó thực hiện những lệnh 4 (1 tại một thời điểm) trong Immediate Window
? Evaluate ("SleepESub()")
? [SleepESub()]
? [SleepESub]
? SleepESub
Các đầu tiên 2 thực thi mã ngay lập tức; có nghĩa là với tôi họ đã đánh giá mã. Số thứ ba (theo tài liệu) phải là Evaluating
nhưng không hoạt động theo cách tương tự giống như trong phần của mô-đun. Cửa sổ ngay lập tức đang đưa ra một số Error 2023
tuy nhiên cùng một cuộc gọi từ bên trong mô-đun của một mô-đun thực thi nó như thể bạn đang gọi một phụ.Đó đợi số 20 seconds
như thể nó là số bình thường là Call SleepESub()
.
Có ai có thể giải thích những gì tôi thiếu ở đây không? Có phải dòng số 3 không phải là cuộc gọi Evaluation
thích hợp không? hay nó đánh giá cuộc gọi đến tự phụ (nếu có ý nghĩa)
Cập nhật:
Tôi nghĩ một số người đang hiểu nhầm những gì tôi đang đánh giá đây - đừng lo lắng nó là một chủ đề nâng cao và tôi không phải là một nhà văn sách và bạn không phải là độc giả tâm trí. (tha thứ cho tôi ...)
Để có ý tưởng tốt hơn, bạn có thể so sánh kết quả từ cửa sổ ngay lập tức so với phần thân của mô-đun.Hãy thử mã này:
' Run each of the calls separately
' in a module's body and compare it with
' the previous calls from the Immediate Window
Sub ModuleBody()
Evaluate ("SleepESub()")
'[SleepESub()]
'[SleepESub]
'SleepESub
End Sub
thú vị. tôi cần phải loại bỏ '?' cho hai cái cuối cùng. 'Run (" SleepESub ")' và 'Run (" SleepESub() ")' là tương tự nhưng 'Đánh giá (" SleepESub ")' không hoạt động. Chuyện gì vậy ?! –
Với Excel 2010 (_Evaluate_ doc giống như 2013), '? Đánh giá ("SleepESub") 'trả về' Lỗi 2029'; tương tự cho '? [SleepESub] '. Tôi sẽ kết luận rằng năm 2010 là "sạch" (phù hợp với tài liệu) –
@ d-stroyer '? [SleepESub] '(* được gọi từ cửa sổ ngay lập tức *) trả lại một' Lỗi 2029', tuy nhiên Nếu bạn thực hiện cuộc gọi tương tự trong phần thân của mô-đun, nó sẽ hoạt động, mặc dù không đánh giá nó thực hiện như thể bạn đang gọi một phụ . Tôi bắt đầu tự hỏi nếu các dấu ngoặc vuông chỉ được bỏ qua trong trường hợp này là trình biên dịch * nghĩ * '[SleepESub] = SleepyESub'. Mặt khác, nếu Cửa sổ ngay lập tức đưa ra một lỗi thì cuộc gọi giống nhau từ một mô-đun cơ thể hoạt động như thế nào? –