Mã VBA sau dừng tại Me.Show
. Từ các thử nghiệm của tôi, có vẻ như là Me.Show
dừng tất cả việc thực thi mã, ngay cả khi mã nằm bên trong UserForm.Tại sao Hiển thị UserForm như là Thực thi Mã Dừng Phương thức?
phần này nằm ngoài UserForm:
Public Sub TestProgress()
Dim objProgress As New UserForm1
objProgress.ShowProgress
Unload objProgress
End Sub
Phần này là bên trong UserForm:
Private Sub ShowProgress()
Me.Show vbModal
Dim intSecond As Integer
For intSecond = 1 To 5
Application.Wait Now + TimeValue("0:00:01")
Me.ProgressBar1.Value = intSecond/5 * 100
Next intSecond
Me.Hide
End Sub
Mã này dừng lại ở Me.Show
, sau khi UserForm được hiển thị. Không có lỗi, nó chỉ ngừng thực thi mã. Có vẻ như rằng cách duy nhất để thực thi mã bên trong một UserForm phương thức trong VBA là bao gồm nó trong thủ tục UserForm_Activate như thế này:
phần này nằm ngoài UserForm:
Public Sub TestProgress()
Dim objProgress As New UserForm1
Load objProgress
Unload objProgress
End Sub
Phần này là bên trong UserForm:
Private Sub UserForm_Initialize()
Me.Show vbModal
End Sub
Private Sub UserForm_Activate()
Dim intSecond As Integer
For intSecond = 1 To 5
Application.Wait Now + TimeValue("0:00:01")
Me.ProgressBar1.Value = intSecond/5 * 100
Next intSecond
Me.Hide
End Sub
Tất nhiên, tôi không thể đặt Me.Show
bên UserForm_Activate vì thủ tục mà chỉ cháy sau khi UserFo rm Hiển thị sự kiện.
Các tài liệu cho UserForm.ShowModal
nói "Khi một UserForm là phương thức, người dùng phải cung cấp thông tin hoặc đóng UserForm trước khi sử dụng bất kỳ phần nào khác của ứng dụng. Không có mã tiếp theo được thực hiện cho đến khi UserForm được ẩn hoặc bốc dỡ."
Tôi đang cố gắng sử dụng phương thức UseForm theo phương thức làm thanh tiến trình để ngăn người dùng tương tác với ứng dụng trong khi quá trình chạy. Nhưng điều này sẽ khó thực hiện nếu tất cả mã của tôi phải nằm trong thủ tục UserForm_Activate.
Tôi có thiếu gì đó ở đây không? Tại sao tất cả việc thực thi mã đều dừng tại Me.Show
?
Tất cả những gì bạn thực sự cần làm nếu bạn vẫn muốn có thể tương tác với trang tính trong khi biểu mẫu đang sử dụng mã này khi gọi biểu mẫu người dùng: 'userform.show vbModeless'. – Casey