vba_voortgangsindicator

Option Explicit

'-----------------------------------------------------------------------------------------------------------------------
' Auteur        : pascalterheege.nl
' Datum         : 28-2-2020
' Doel          : voortgangsindicator
' Opmerking     : via UserForm of StatusBar
'-----------------------------------------------------------------------------------------------------------------------

Sub start()

    Dim huidig As Integer
    Dim max As Integer: max = 10
    
    For huidig = 1 To max
    
        DoEvents
    
        Application.Wait Now + TimeValue("00:00:01")
        
        toonVoortgangUserForm huidig, max
        toonVoortgangStatusBar huidig, max
    
    Next huidig

End Sub

'-----------------------------------------------------------------------------------------------------------------------
' Doel          : voortgangsindicator via UserForm
' Objecten      : UserForm1 | Frame1 | Label1 (zelf maken)
' Opmerking     : plaats Label1 in Frame1
'-----------------------------------------------------------------------------------------------------------------------

Sub toonVoortgangUserForm(huidig, max)
    
    With UserForm1
        
        .Label1.BackColor = vbBlue
        .Label1.Width = huidig / max * .Frame1.Width
        .Show 0
        .Repaint
    
    End With

End Sub

'-----------------------------------------------------------------------------------------------------------------------
' Doel          : voortgangsindicator via StatusBar
' Objecten      : Application.StatusBar (ingebouwd)
' Opmerking     : lengte is aantal |||
' Bron          : https://wellsr.com/vba/2017/excel/vba-application-statusbar-to-mark-progress/
'-----------------------------------------------------------------------------------------------------------------------

Sub toonVoortgangStatusBar(huidig As Integer, max As Integer)
    
    Dim Percentage As Integer
    Dim Voltooid As Integer
    
    Dim Lengte As Integer: Lengte = 100
    
    Percentage = Int((huidig / max) * Lengte)
    Voltooid = Round(Percentage / 100 * Lengte, 0)
    
    Application.StatusBar = " [" & String(Percentage, "|") & _
                            Space(Lengte - Percentage) & "] " & Voltooid & _
                             "% Voltooid"

End Sub