PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : نمايش درصد پيشرفت در vba



Amir Ghasemiyan
2014/12/01, 01:22
سلام دوستان

تو اين تاپيك ميخوام براتون نحوه ساخت يك درصد پيشرفت فرايند رو بهتون آموزش بدم

خب اول نتيجه نهايي رو بهتون نشون ميدم.
5120

خب حالا بريم مرحله به مرحله اين درصد پيشرفت رو بسازيم.

اول از همه يك فرم ميسازيم با دوتا ليبل و يك فريم. فريم براي كادر، يك ليبل براي نشون دادن ميزان پيشرفت (قسمت آبي رنگ) يك ليبل براي نشون دادن درصد (قسمت عددي)

حالا روي فرم كليك ميكنيم و F7 رو ميزنيم. تمامي كدها رو حذف كرده و كدهاي زير رو بهش اضافه ميكنيم


'Hide a UserForm's Close Button
'Find the userform's Window
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Get the current window style
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
'Set the new window style
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_STYLE = -16
Const WS_SYSMENU = &H80000
Private Sub UserForm_Initialize()
Dim hWnd As Long, lStyle As Long
'Which type of userform
If Val(Application.Version) >= 9 Then
hWnd = FindWindow("ThunderDFrame", Me.Caption)
Else
hWnd = FindWindow("ThunderXFrame", Me.Caption)
End If
'Get the current window style and turn off the Close button
lStyle = GetWindowLong(hWnd, GWL_STYLE)
SetWindowLong hWnd, GWL_STYLE, (lStyle And Not WS_SYSMENU)
End Sub


اين كد باعث ميشه كه دكمه خروج از بالاي فرم حذف بشه و پنجره قابل بسته شدن نباشه كه البته ضروري هم نيست. من ترجيح دادم دكمه حذف بشه

بعد در ادامه اين كد رو اضافه ميكنيم:

Private Sub UserForm_Activate()
code
End Sub




اين كد باعث ميشه بعد از فعال شدن فرم درصد پيشرفت يكسري كد اجرا بشه


خب حالا يك ماژول ميسازيم و اين كدها رو داخل ماژول ميذاريم:


Sub code()
Dim i As Integer, j As Integer, pctCompl As Single
For i = 1 To 100
pctCompl = i
progress pctCompl
Application.Wait Now() + TimeSerial(0, 0, 1)
Next i
Unload UserForm1
End Sub
Sub progress(pctCompl As Single)
UserForm1.Text.Caption = pctCompl & "%"
UserForm1.Bar.Width = pctCompl * 2
DoEvents
End Sub


اين كد همان فرايندي هست كه قرار هست انجام بشه و ما درصد پيشرفت اين فرايند رو متوجه بشيم.
قسمت هايي كه با سبز مشخص كردم اجباري هست و بايد وجود داشته باشه. بقيش با توجه به كاري كه ميخوايم انجام بديم تغيير ميكنه
خب در آخر هم كد زير رو در ادامه كدهاي قبل اضافه ميكنيم


Sub CallFrom()
UserForm1.Show
End Sub


اين كد براي شروع فرايند هست و درواقع با اجراي اين كد فرايند استارت ميخوره

به همين راحتي يك فرم درصد پيشرفت ساختيم. من يك نمونه هم پيوست ميكنم كه بهتر بتونين استفاده كنيد

afshin181
2015/09/15, 00:15
salam ba tashakor
chetor mishe zamane in process ro kahesh dad?

Amir Ghasemiyan
2015/09/15, 01:37
salam ba tashakor
chetor mishe zamane in process ro kahesh dad?

دوست عزیز ضمن خوش آمدگویی خدمت شما، لطف کنید فارسی تایپ کنید

در خصوص سوال شما هم عرض کنم که این خط از کدها رو تغییر بدین


Application.Wait Now() + TimeSerial(0, 0, 0.35)


من الان تغییر دادم که بدونین چطوری باید عمل کنید

sohrabahmadi
2017/02/03, 09:23
سلام و تشکر از شما چطور میشه زمان این پیشرفت رو با زمان اجرای یک کد هماهنگ کرد؟

پیمان طهماسبی
2020/09/30, 00:33
با سلام و احترام
این فرم بای من باز نمیشه
قابل ذکر هست که ویندوز 10 و 64 بیتی دارم
لطفا راهنمایی بفرمایید