Nhờ giúp đỡ cách tạo 1 msgbox để đếm bước hiện tại trong hàm for

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

heyhey1994

Thành viên chính thức
Tham gia
16/3/17
Bài viết
78
Được thích
18
Chào mọi người trong diễn đàn,
Như tiêu đề, để đếm bước trong hàm for, em hay đếm bằng cách sử dụng statusbar như sau:
Application.StatusBar = "Step " & i " / " & total.

Giờ em muốn làm 1 msgbox cũng đếm tương tự, nhưng khi đếm xong sẽ hiện 1 cái nút OK, sau đó click vào để tắt box đi. Trước đây em có thấy 1 bài viết tương tự mà giờ lại không thể nhớ được từ khóa về vấn đề này, mong mọi người giúp đỡ.

Em xin cảm ơn ạ.
 
Chào mọi người trong diễn đàn,
Như tiêu đề, để đếm bước trong hàm for, em hay đếm bằng cách sử dụng statusbar như sau:
Application.StatusBar = "Step " & i " / " & total.

Giờ em muốn làm 1 msgbox cũng đếm tương tự, nhưng khi đếm xong sẽ hiện 1 cái nút OK, sau đó click vào để tắt box đi. Trước đây em có thấy 1 bài viết tương tự mà giờ lại không thể nhớ được từ khóa về vấn đề này, mong mọi người giúp đỡ.

Em xin cảm ơn ạ.
Vẫn không hiểu ý đồ, nếu chạy xong thì viết msgbox ngoài vòng for là được rồi chứ?
for i=1 to total
...
Next i
Msgbox "OK"
 
Upvote 0
Có phải kiểu MsgBox WaitDone ở bài viết này không?

msgBox_waitDone.gif

 
Upvote 0
thế này là được rồi
Mã:
for i = 1 to total
   ...
next
Msgbox i & "/ " & total

total = 100 chả lẽ nhấn ok cái thông báo 90 lần?

Còn nếu vẫn để trong vòng lặp đếm tăng dần thì dùng
Mã:
Debug.Print i & "/ " & total

Nhớ nhấn Ctrl G mở immediate window để xem
 
Upvote 0
Mình có cái progress bar đơn giản nhỏ gọn này. Sẵn đây chia sẻ cho bạn nào cần. :)
Mã:
Sub ProgressBar(ByVal lDone As Long, ByVal lTotal As Long, ByVal sText As String)
    On Error Resume Next
    Dim dTmp As Long
    Static dPercent As Long
    dTmp = Round((lDone / lTotal) * 100, 0)
    If dPercent <> dTmp Then
        dPercent = dTmp
        Application.StatusBar = String(dPercent, ChrW(9608)) & String(100 - dPercent, ChrW(9618)) & " " & dPercent & "% - " & sText
    End If
End Sub
 

File đính kèm

  • Test progress bar.xlsm
    17.8 KB · Đọc: 18
Upvote 0
Hì, chắc bác nói tới exit for
Hầu hết các bạn ở đây chỉ dùng vòng for để lặp lại một số lần nhất định.
Dân chuyên vòng lặp còn dùng dùng phép so sánh biến điều khiển với định trị cuối để biết vòng lặp có thoát sớm.

Lại thêm:
Khác với Pascal cổ điển, biến điều khiển Basic (VBA) có thể thay đổi trị được:
For i = 1 to 10
i = i + 1
Next i
Trường hợp này, ta thấy vòng lặp chạy ít hơn 10 lượt.
(Pascal phiên bản cổ điển không cho phép thay đổi i)

Trở lại vấn đề của thớt.
Tôi nghĩ rằng thớt chưa đủ trình độ để hiểu mình đòi hỏi gì. Tôi diễn giải ở đây cho trường hợp chung, khi người ta muốn biết vồng lặp đã chay bao nhiêu lượt.
- Biến điều khiển vòng lặp không hẳn luôn luôn cho biết số lượt chạy: Điển hình hai trường hợp:
1. Khi biến bị thay đổi bên trong voingf lặp, như ví dụ trên
2. Vòng lặp dùng collection, thay vì biến điều khiển. Tức vòng lặp For Each.
Cách dễ nhất để biết đã chạy bao nhiêu lượt là dùng một biến đếm số lượt.
 
Upvote 0
Chỗ này kết thúc for thì i tăng thêm 1 nữa rồi Thầy, lúc đó i > total
Theo tôi hiểu trong bài 1 thì hoặc là thoát sớm, hoặc là tăng có điều kiện nên luôn nhỏ hơn total, nên mới cần đếm. Chứ vừa bằng total thì đếm làm gì nữa! Vì lẽ đó tôi mới viết nhấn ok cái thông báo 90 lần/ 100 chứ không viết 100/ 100
 
Upvote 0
Em cảm ơn mọi người đã quan tâm và trả lời câu hỏi của em. Chắc là do cách diễn đạt của em chưa rõ nên làm nhiều bác hiểu lầm, cho em xin lỗi ạ. Ban đầu thì em muốn làm ra 1 cái msgbox giống hình vẽ kiểu như thế này, để đếm bước/tổng. Bữa giờ em có tìm kiếm thêm, thì từ khóa dùng để kiếm cái này chính xác là progress bar với userform và em đã làm được rồi, một lần nữa cảm ơn sự nhiệt tình của các bác ạ.
1690425196873.png
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom