Hiện thông báo khi đang tính toán

Liên hệ QC

chibi

Thành viên tích cực
Thành viên danh dự
Tham gia
10/1/07
Bài viết
1,120
Được thích
622
Cho tôi hỏi.
Tôi có đoạn code như sau:
for i=1 to 1999
cells(i,1).value=i
next
Tôi muốn trong khi thực hiện đoạn code này thì hiện hộp thông báo “Chương trình đang tính toán” và hộp đóng lại sau khi đoạn code kết thúc.
 
Dear chibi,
----------
Câu hỏi của bạn rất thú vị!
Thường thì người dùng giao tiếp với chương trình thông qua hộp thoại MsgBox, InputBox. Song các hộp thoại này chỉ để thông báo theo một ngữ cảnh cụ thể, nghĩa là chương trình sẽ tạm ngưng cho tới khi hộp thoại được đóng lại. Điều này không đáp ứng được yêu cầu của bạn, đó là phải diễn tả được tiến trình hành động của chương trình.
Công cụ thích hợp nhất trong trường hợp này là StatusBar. Đoạn code sau đây rất dễ hiểu và chắc là đáp ứng được yêu cầu của bạn:
Mã:
Public Sub Writing_Status()
Dim i  As Long, oldStatusBar As Boolean
oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
For i = 1 To 1999
    Cells(i, 1).Value = i
    Application.StatusBar = "Writing in row " & i
Next
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar
End Sub
 
Upvote 0
Cảm ơn Cu tí sành điệu. Nhưng chữ ở Statusbar trông không được "hoành tráng" lắm, tiếc quá.
 
Upvote 0
Bạn thử xem nhé

chibi đã viết:
Cho tôi hỏi.
Tôi có đoạn code như sau:
for i=1 to 1999
cells(i,1).value=i
next
Tôi muốn trong khi thực hiện đoạn code này thì hiện hộp thông báo “Chương trình đang tính toán” và hộp đóng lại sau khi đoạn code kết thúc.

Bạn thử đoạn code sau xem, tuy nó chỉ là một dòng thông báo trên Sheet nhưng chắc là nó đáp ứng được yêu cầu của bạn
Chúc thành công
Thân

Sub Thu()
For i = 1 To 2000
Cells(i, 1).Value = i
Range("B2").Formula = "Ban dang o dong thu " & i
Next i
Range("B2").Select
Selection.ClearContents
End Sub
 
Upvote 0
anhphuong đã viết:
Bạn thử đoạn code sau xem,
Sub Thu()
For i = 1 To 2000
Cells(i, 1).Value = i
Range("B2").Formula = "Ban dang o dong thu " & i
Next i
Range("B2").Select
Selection.ClearContents
End Sub

Dear anhphuong,
---------------
Thận trọng, nếu dùng Formula không tăng thêm tính chuyên nghiệp mà chương trình còn chậm đi một nửa vì Worksheet sẽ phải xử lý sự kiện Change một cách không cần thiết khi:
Range("B2").Formula = "Ban dang o dong thu " & i

Nếu muốn chuyên nghiệp hơn, các bạn có thể tạo 1 user form:
Mã:
Private Sub UserForm_Click()
Dim i As Long
For i = 1 To 2000
    Cells(i, 1).Value = i
    Label1.Caption = "Writing in row " & i
    Me.Repaint
Next i
Label1.Caption = "Finish"
End Sub

Bạn chú ý câu lệnh Me.Repaint, nó rất có ý nghĩa trong trường hợp này.
 
Upvote 0
Cám ơn Cu Tí. Quả nhiên sành điệu !
 
Upvote 0
Cu tí sành điệu ơi, làm sao hiện form để click được? Giải thích cụ thể giúp được không?
 
Upvote 0
Bạn thử tham khảo thêm ControlForOffice của anh Tuân xem sao, có UserForm kiểu như bạn mong muốn đấy.
 
Upvote 0
chibi đã viết:
Cu tí sành điệu ơi, làm sao hiện form để click được? Giải thích cụ thể giúp được không?
Dear chibi,
----------
- Mở cửa sổ Visual Basic Editor: Alt+F11
- Thêm một User Form: Alt+I+U
- Thêm một Lablel: Tại màn hình thiết kế: Kéo rê chuột đối tượng Label từ hộp Tools box đưa vào User Form (tên của Label mặc định là Label1, nếu không trong thủ tục bạn sẽ phải thay đổi Label1 theo tên mà bạn đặt cho Label)
- Double click vào User Form hoặc F7 để mở cửa sổ code, mặc định thủ tục UserForm_Click() sẽ được sử dụng. Bạn xoá bỏ 2 dòng lệnh tự động phát sinh này đi rồi copy thủ tục đã được giới thiệu vào Module này.
- F5 để thực thi chương trình rồi click vào UserForm

Mình không đưa file mình hoạ vì các bước làm rất đơn giản, hi vọng là bạn làm được!
 
Upvote 0
Web KT
Back
Top Bottom