Giúp em tạo userform tiến trình code chạy (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

traicauhd

Thành viên mới
Tham gia
7/4/11
Bài viết
43
Được thích
0
em có đoạn code thong_ke_ton_kho đoạn code này dùng để thống kê kho
em muốn khi chạy code trên thì hiện thị một usserform hiện % từ 1 đến 100 % rồi kết thúc

đọc hướng dẫn và đã làm thử nhưng mà không thành công . nhờ các cao thủ giúp đỡ
 

File đính kèm

Bạn tìm trên GPE Progress bar code cũng không khó quá tải về mà chế
 
Upvote 0
Như hôm trước đã viết ở đây
Định giúp bạn, nhưng bạn nói thế này, thì đúng là bó tay (vì chính bạn không thử làm và nỗ nực giải quyết vấn đề của chính ta), và 1 lý do lớn nữa đó là:

Dữ liệu có mấy dòng, code trên chạy chút là xong, vậy cần gì progress bar - vì progress bar thường cho tiến trình các code chạy thời gian dài, giúp NSD biết tiến trình đang thực hiệnd dến đâu (nhanh quá thì hiện form lên, tắt form là xong)

Đọc lại từ post#1 thấy bài của bạn đang có code và công thức và lọc và fill lẫn lộn, và dữ liệu thì sơ sài đặt vấn đề thì không rõ dàng, dẫn đến mọi thứ nửa vời.

hết


Khi đó tôi đã định làm và đã thử rui, nhưng bạn nói botay - thành ra cùng botay

Vậy giờ tôi upload lại file đó, và bạn tham khảo (vì trong file mới cũng không biết bạn muốn đặt form tiến trình cho sub nào):

- Tại sheet1 bấm nút đỏ: TKE TON KHO , sẽ thấy form tiến trình được thực hiện

- Xem code ở module form code "frmProgBar" và module Loc_Va_Dan , sub Thong_ke_....

- Lưu ý: tôi chỉ thêm code xử lý hiển thị tiến trình thực hiện tính toán,... Các code cũ để nguyên không thay đổi gì cả

nếu phiên bản mới của bạn có gì thay đổi, thì bạn tự tham khảo và ghep code mới nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
em đã thực hiện ghép code vào nhưng có lỗi
Public Sub Thong_Ke_Ton_Kho()
Dim DL, Kq(), r As Long, rw As Long, c As Long, i, juB As Long
On Error Resume Next
frmProgBar.Show False
Call progress(1)


'NAP SO LIEU CUA SHEET1 VAO MANG DL, SAU DO SORT
'Nap so lieu cua sheet1 vao mang DL
DL = Sheet1.Range("A9", Sheet1.Range("E1000000").End(xlUp))
'Khai bao mang Kq
ReDim Kq(1 To 1, 1 To UBound(DL, 2))


'Sort mang DL theo Lot No
For r = 1 To UBound(DL)
For c = 1 To UBound(DL, 2)
Kq(1, c) = DL(r, c)
Next c


For rw = r + 1 To UBound(DL)
If Kq(1, 4) > DL(rw, 4) Then
For c = 1 To UBound(DL, 2)
Kq(1, c) = DL(rw, c)
DL(rw, c) = DL(r, c)
DL(r, c) = Kq(1, c)
Next c
End If
Next rw
Next r


Call progress(10)
Application.ScreenUpdating = False
'LOC VA DAN
'Xoa toan bo cac dong cua sheet13
Sheet13.UsedRange.ClearContents
j = 1
With Sheet8
'Quet vung dieu kien, nap vao J9 va K9
For r = 7 To .Range("U1000000").End(xlUp).Row
.Range("J9").Value = .Range("U" & r)
.Range("K9").Value = .Range("V" & r)
Sheet14.Range("A11:E120").ClearContents


ReDim Kq(1 To UBound(DL), 1 To UBound(DL, 2))
i = 0
'Loc DL theo J9
For rw = 1 To UBound(DL)
If DL(rw, 3) = .Range("J9") Then
i = i + 1
For c = 1 To UBound(DL, 2)
Kq(i, c) = DL(rw, c)
Next c
End If
If uB > 99 Then
If rw Mod 100 = 0 Then _
Call progress(10 + Int(80 * (r - 7) / (nR - 6)) + Int(80 * rw / (nR - 6) / uB))
Next rw
'Dan ket qua loc vao sheet14
Sheet14.Range("A11").Resize(i, UBound(Kq, 2)).Value = Kq
'Lay ket qua cua sheet8
Kq = .Range("A7", "AA56")
'Dan ket qua tu sheet8 vao sheet13
Sheet13.Range("A" & j + 1).Resize(UBound(Kq, 1), UBound(Kq, 2)).Value = Kq
j = j + UBound(Kq, 1)
Call progress(10 + Int(80 * (r - 6) / (nR - 6)))
Next r
End With


Sheet13.Range("A1:V1") = Sheet8.Range("A4:V4").Value
Call progress(95)
Sheet13.UsedRange.Font.ColorIndex = 0
Sheet13.UsedRange.Columns.AutoFit
Application.ScreenUpdating = True
Beep


Sheet15.Range("c6").AutoFilter
Sheet15.Range("c6").AutoFilter


Sheets("sheet3").UsedRange.AutoFilter Field:=3, Criteria1:="<>"


Sheet16.Range("K5").AutoFilter
Sheet16.Range("K5").AutoFilter


Sheets("HSK (2)").UsedRange.AutoFilter Field:=9, Criteria1:="<>"












Call progress(100)

MsgBox "HOÀN THÀNH"
End Sub
 
Upvote 0
đã sửa lại nhưng có một vấn đề chạy code hiện 10 % luôn rồi đến 100 %
chứ không phải 1% 2% 3%

sửa lại giúp mình với
Public Sub Thong_Ke_Ton_Kho()
Dim DL, Kq(), r As Long, rw As Long, c As Long, i, j, uB As Long
On Error Resume Next
frmProgBar.Show False
Call progress(1)


'NAP SO LIEU CUA SHEET1 VAO MANG DL, SAU DO SORT
'Nap so lieu cua sheet1 vao mang DL
DL = Sheet1.Range("A9", Sheet1.Range("E1000000").End(xlUp))
'Khai bao mang Kq
ReDim Kq(1 To 1, 1 To UBound(DL, 2))


'Sort mang DL theo Lot No
For r = 1 To UBound(DL)
For c = 1 To UBound(DL, 2)
Kq(1, c) = DL(r, c)
Next c


For rw = r + 1 To UBound(DL)
If Kq(1, 4) > DL(rw, 4) Then
For c = 1 To UBound(DL, 2)
Kq(1, c) = DL(rw, c)
DL(rw, c) = DL(r, c)
DL(r, c) = Kq(1, c)
Next c
End If
Next rw
Next r


Call progress(10)
Application.ScreenUpdating = False
'LOC VA DAN
'Xoa toan bo cac dong cua sheet13
Sheet13.UsedRange.ClearContents
j = 1
With Sheet8
'Quet vung dieu kien, nap vao J9 va K9
For r = 7 To .Range("U1000000").End(xlUp).Row
.Range("J9").Value = .Range("U" & r)
.Range("K9").Value = .Range("V" & r)
Sheet14.Range("A11:E120").ClearContents


ReDim Kq(1 To UBound(DL), 1 To UBound(DL, 2))
i = 0
'Loc DL theo J9
For rw = 1 To UBound(DL)
If DL(rw, 3) = .Range("J9") Then
i = i + 1
For c = 1 To UBound(DL, 2)
Kq(i, c) = DL(rw, c)
Next c
End If
If uB > 99 Then
If rw Mod 100 = 0 Then _
Call progress(10 + Int(80 * (rw - 7) / (rw - 6)) + Int(80 * rw / (rw - 6) / uB))
End If
Next rw
'Dan ket qua loc vao sheet14
Sheet14.Range("A11").Resize(i, UBound(Kq, 2)).Value = Kq
'Lay ket qua cua sheet8
Kq = .Range("A7", "AA56")
'Dan ket qua tu sheet8 vao sheet13
Sheet13.Range("A" & j + 1).Resize(UBound(Kq, 1), UBound(Kq, 2)).Value = Kq
j = j + UBound(Kq, 1)
Next r
End With


Sheet13.Range("A1:V1") = Sheet8.Range("A4:V4").Value
Sheet13.UsedRange.Font.ColorIndex = 0
Sheet13.UsedRange.Columns.AutoFit
Application.ScreenUpdating = True
Beep
Call progress(100)


Sheet15.Range("c6").AutoFilter
Sheet15.Range("c6").AutoFilter


Sheets("sheet3").UsedRange.AutoFilter Field:=3, Criteria1:="<>"


Sheet16.Range("K5").AutoFilter
Sheet16.Range("K5").AutoFilter


Sheets("HSK (2)").UsedRange.AutoFilter Field:=9, Criteria1:="<>"


End Sub




Private Sub progress(pctCompl As Long)
'Application.Wait (Now + TimeValue("0:00:01") / 1)
frmProgBar.lblText.Caption = pctCompl & "% Completed"
frmProgBar.lblProgBar.Width = Int(pctCompl * 2.5)
DoEvents
End Sub
 
Upvote 0
đã sửa lại nhưng có một vấn đề chạy code hiện 10 % luôn rồi đến 100 %
chứ không phải 1% 2% 3%

Chúc mừng bạn đã ứng dụng được,
Để hiểu sao chia nhỏ 10 cho tiếp 1 2 3 % thì bạn xem đoạn lệnh này cho hiểu và sẽ ứng dụng được
Mã:
Call progress(10 + Int(80 * (rw - 7) / (rw - 6)) + Int(80 * rw / (rw - 6) / uB))

còn tại sao lại để 10, không chia nhỏ nữa, vì sub code cũ phiên bản ...49 đoạn code đầu sẽ rất nhanh, nếu chia nữa không có ý nghĩa nữa nên để 10% luôn. Giờ nếu khác bạn có thể thay đổi cho hợp lý.

Quan trọng là nắm được sự phân chia % cho toàn tiến trình của chương trình áp dụng, thì bạn sẽ hiểu và vận dụng thích hợp.
 
Upvote 0
em có đoạn code thong_ke_ton_kho đoạn code này dùng để thống kê kho
em muốn khi chạy code trên thì hiện thị một usserform hiện % từ 1 đến 100 % rồi kết thúc

đọc hướng dẫn và đã làm thử nhưng mà không thành công . nhờ các cao thủ giúp đỡ

bạn có thể dùng shockwave flash (ảnh động) để biểu diễn quá trình code đang chạy (giống như điện thoại Window Phone vậy đó --=0--=0--=0)
http://datapigtechnologies.com/blog/index.php/using-flash-progress-indicators/
IC576275.png
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom