From f15a8fd40dee0c80bad27cc2fd9469bb2d0f9673 Mon Sep 17 00:00:00 2001 From: John Molendyk Date: Mon, 8 Jul 2019 18:58:23 -0700 Subject: [PATCH 1/2] Update README.md --- README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bc0a095..2c09450 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,22 @@ # ExcelVBA_ProgressBar -Launches a customizable userform that displays as an animated progress bar dependent upon a percent complete status. +Creates a simple non-modal dialog in Excel +Used to effectively show the progress of a macro + +## Installation +1) Download +2) In Excel VBA Editor: + + File -> Import File ... + + Select ProgressForm.frm + + Optionally, repeat for ProgressExamples.bas + +## Usage +``` +Sub example() + ProgressForm.start # displays the ProgressForm + ProgressForm.update pct # updates the ProgressForm to pct% + ProgressForm.done # hides the ProgressForm +End Sub +``` + +## License +GNU Public License From ad61ce8de2a82ba1ba6861637276d7d148da6a49 Mon Sep 17 00:00:00 2001 From: John Molendyk Date: Mon, 8 Jul 2019 19:05:34 -0700 Subject: [PATCH 2/2] Interrupt Added Cleaned the Macro methodology Added Macro Interrupting --- Event_ProgressBar.bas | 27 --------- Form Setup ReadMe.txt | 53 ----------------- Progress Bar.xlsm | Bin 16544 -> 0 bytes ProgressExamples.bas | 135 ++++++++++++++++++++++++++++++++++++++++++ ProgressForm.frm | 37 +++++++++--- ProgressForm.frx | Bin 5144 -> 5144 bytes 6 files changed, 164 insertions(+), 88 deletions(-) delete mode 100644 Event_ProgressBar.bas delete mode 100644 Form Setup ReadMe.txt delete mode 100644 Progress Bar.xlsm create mode 100644 ProgressExamples.bas diff --git a/Event_ProgressBar.bas b/Event_ProgressBar.bas deleted file mode 100644 index 4ce8782..0000000 --- a/Event_ProgressBar.bas +++ /dev/null @@ -1,27 +0,0 @@ -Attribute VB_Name = "Event_ProgressBar" -Option Explicit -Option Base 1 - -Sub ShowStatus() - ProgressForm.Show -End Sub - -Sub TimeFrame(pauseTime As Double) - Start = Timer - Do - DoEvents - Loop Until (Timer - Start) >= pauseTime -End Sub - -Sub SampleEventStatusGenerator() - Dim i As Long - For i = 0 To 100 - Call UpdateProgressBar(i) - Call TimeFrame(0.1) - Next i -End Sub - -Sub UpdateProgressBar(lngPercentComplete As Long) - ProgressForm.Bar.Width = 2 * lngPercentComplete - ProgressForm.Status.Caption = lngPercentComplete & "% Complete" -End Sub diff --git a/Form Setup ReadMe.txt b/Form Setup ReadMe.txt deleted file mode 100644 index d94c2a8..0000000 --- a/Form Setup ReadMe.txt +++ /dev/null @@ -1,53 +0,0 @@ -Form Setup: - 1. Form: Change caption to progress indicator - 2. Frame: Add frame control - a. Clear caption - b. Height = 24 - c. Width = 204 - 3. Label: Add outside frame - a. Change caption to 0% Completed - 4. Label: Add inside frame - a. Change BackColor to Highlight - b. Clear caption - c. Height=20 - d. Width=10 (min of 0, max of 200) - e. Top and Left offset = 0 - -Form: -Private Sub UserForm_Activate() - Call SampleEventStatusGenerator - Unload ProgressForm -End Sub - -Private Sub UserForm_Initialize() - ProgressForm.Status.Caption = "0% Complete" - ProgressForm.Bar.Width = 10 -End Sub - -Module: -Option Explicit -Option Base 1 - -Sub ShowStatus() - ProgressForm.Show -End Sub - -Sub TimeFrame(pauseTime As Double) - Start = Timer - Do - DoEvents - Loop Until (Timer - Start) >= pauseTime -End Sub - -Sub SampleEventStatusGenerator() - Dim i As Long - For i = 0 To 100 - Call UpdateProgressBar(i) - Call TimeFrame(0.1) - Next i -End Sub - -Sub UpdateProgressBar(lngPercentComplete As Long) - ProgressForm.Bar.Width = 2 * lngPercentComplete - ProgressForm.Status.Caption = lngPercentComplete & "% Complete" -End Sub diff --git a/Progress Bar.xlsm b/Progress Bar.xlsm deleted file mode 100644 index 985792277de75587d5ffab4f240ed5cc4508eb4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16544 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

6Hm-imYJOvvHZ9 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 diff --git a/ProgressExamples.bas b/ProgressExamples.bas new file mode 100644 index 0000000..e56a1c0 --- /dev/null +++ b/ProgressExamples.bas @@ -0,0 +1,135 @@ +Attribute VB_Name = "ProgressExamples" +Public Sub example() +' example() +' no parameters +' Provides a time based example for the ProgressForm + + Dim i As Long + + ' Displays the ProgressForm and initializes it + ProgressForm.start + + 'simply a loop to do something for showing the ProgressForm + For i = 0 To 100 Step 6 + ' Updates the % on the ProgressForm + ProgressForm.update i + + Application.Wait (Now + TimeValue("0:00:01")) + Next + + ' hides the ProfessForm and cleans up + ProgressForm.done +End Sub + + +Public Sub example2() +' example2() +' no parameters +' Provides a time based example for the ProgressForm with a different Caption + + Dim i As Long + + ' Displays the ProgressForm and initializes it + ProgressForm.start ("Are we done yet?") + + For i = 0 To 100 Step 6 + ProgressForm.update i + Application.Wait (Now + TimeValue("0:00:01")) + Next + ProgressForm.done +End Sub + + +Public Sub example3() +' example3() +' no parameters +' Provides a time based example for the ProgressForm with macro interruption + + Dim i As Long + + ' Displays the ProgressForm and initializes it + Call ProgressForm.start(, True) + + ' or any of the following + 'ProgressForm.start , True + 'ProgressForm.start "With Interrupt", True + 'ProgressForm.start bInterrupt:=True + + + For i = 0 To 100 Step 6 + ProgressForm.update i + Application.Wait (Now + TimeValue("0:00:01")) + Next + ProgressForm.done +End Sub + + +Public Sub example4() +' example4() +' no parameters +' Provides a time based example using a label with the progress + + Dim i As Long + ProgressForm.start + + For i = 0 To 5 + ' Updates the % on the ProgressForm with a label + ProgressForm.update (i / 5 * 100), "Performing Task: " & i + + Application.Wait (Now + TimeValue("0:00:01")) + Next + + ' hides the ProfessForm and cleans up + ProgressForm.done +End Sub + + + +'finally an example that does something useful +Public Sub clearBlankCells() +' clearBlankCells +' parameters: none are provided, but uses Selection to specify the range of cells to clear +' if selection is a single cell, the entire active range is used +' Removes blank cells (cells that are empty) and blank rows (rows that have no non-empty cells) +' + Dim r As Range ' area to manipulate + Dim i As Long, j As Long ' indicies + Dim x As Long, y As Long ' dimensions + Dim isBlank As Boolean ' blank row text + + + Set r = Selection + If (r.rows.Count = 1 And r.columns.Count = 1) Then + Set r = Range(Range("A1"), Range("A1").SpecialCells(xlCellTypeLastCell)) + End If + + x = r.rows.Count + y = r.columns.Count + + Set r = r(1) + +' Displays the ProgressForm and initializes it +ProgressForm.start + + For i = x - 1 To 0 Step -1 + isBlank = True + For j = y - 1 To 0 Step -1 + If (IsEmpty(r.Offset(i, j))) Then + r.Offset(i, j).Delete (xlToLeft) + Else + isBlank = False + End If + Next + If isBlank Then + r.Offset(i, y).EntireRow.Delete + End If + +' Updates the % on the ProfressForm +ProgressForm.update CLng((x - i) / x * 100) + + Next + +' hides the ProfessForm and cleans up +ProgressForm.done + +End Sub diff --git a/ProgressForm.frm b/ProgressForm.frm index 9b769d9..21a7922 100644 --- a/ProgressForm.frm +++ b/ProgressForm.frm @@ -1,7 +1,7 @@ VERSION 5.00 Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} ProgressForm - Caption = "Progress Indicator" - ClientHeight = 1080 + Caption = "Progress" + ClientHeight = 1995 ClientLeft = 120 ClientTop = 465 ClientWidth = 4395 @@ -13,14 +13,35 @@ Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False -Private Sub UserForm_Activate() - Call SampleEventStatusGenerator - Unload ProgressForm +Option Explicit + +Private Sub InterruptButton_Click() + Application.SendKeys "^{BREAK}" End Sub +Private Sub UserForm_Initialize() + ProgressForm.Status.Caption = "0% Complete" + ProgressForm.Bar.Width = 10 +End Sub -Private Sub UserForm_Initialize() - ProgressForm.Status.Caption = "0% Complete" - ProgressForm.Bar.Width = 10 +Sub start(Optional strCaption As String = "Progress", Optional bInterrupt As Boolean = False) + InterruptButton.Visible = bInterrupt + ProgressForm.Caption = strCaption + ProgressForm.Show (0) +End Sub + + +Sub update(lngPercentComplete As Long, Optional strStatus As String = "") + + ProgressForm.Bar.Width = 2 * lngPercentComplete + ProgressForm.Status.Caption = lngPercentComplete & "% Complete" + + SubStatus.Caption = strStatus + DoEvents End Sub + +Sub done() + Unload ProgressForm +End Sub + diff --git a/ProgressForm.frx b/ProgressForm.frx index 098d9774bfa59f54bbc116ab6058176228ac3ab1..d5fe2522cb1c281f06d554d6ca16774b485ae322 100644 GIT binary patch delta 440 zcmZWjy-Pw-6#w1(9%k<&Kc2=jC0qiBAQIXlG(xhWMQJUgpifPE4_eBG{($5zLTlk# zyrn_t(b^pS1Jw`>EiDb%xgstdIQ-7N=l5~inRezf#$(#uIOl~7fKlMQSar4=4fn`7 z>E@P#z^XzEZo?%A(Ef%HTtT_AQ#-84*+810m;^dZd_+?mXw_4~=7kMl8gC2;k&wig zr{;)Y7_#U(POS=G13oET^1q2M520*i`#*q!I7;qj$*DN*@eC_35T`yOb0$Qa`<|`7 zve50-Zs%w2nGMj>192XeE-`AH0?U)YgX!giFHGdrkg&A_6YG0@k>vTJr8U{Ri0Dmr zEn52i(9(bGTYI{}RMRACRa#PMA`wm|q*z}6+w1joLSrzGdHL`Y%R)^fXu$Y?3-N}f h(sVCh7Yt%0+7+{^B@)&e--4)HXRIu~tSN=3@CONNV`=~Z delta 256 zcmbQCF+*d52vZ~5MlmL)$upSTCKg&vj$l48vEjgG36>{}{0TankMDbbg%L_`=4KOR z5@KawVBiH}hFS&&4><;gLiWv$9M>5qJFxIimf*_aeUP#Rtce4pX7WU?dd9ZNg533t zHj^iEXTyzbr~(_knVW}^g_jGcG7qF22skE73P=n7`~UwxCy)oCxk2=1MYhX~Mhq+p z3>-WRJeY0(X@vnMAR_|AX=2Qu>?O2^i8W_3hj2QR0Po~N;W|d<$sdGOnSs&(H7rG&