Tipp 0105 Fortschrittsleiste (ProgressBar)
Autor/Einsender:
Datum:
  Angie
29.08.2004
Entwicklungsumgebung:   Excel 2000
Bei länger andauernden Ausführungen per Makro ist es empfehlenswert, den Ablauf des Vorgangs visuell anzuzeigen. Dies kann z. B. mit Meldungen in der Statusleiste oder wie in diesem Beispiel mit einem Fortschrittsbalken auf einer UserForm geschehen.
Das folgende Beispiel dient lediglich zur Demo, da in diesem Fall eine Fortschrittsleiste gar nicht notwendig wäre, wenn man die Werte zunächst in einem Datenfeld zwischenspeichern und dann als Ganzes in einen Zellbereich kopieren würde, wie in Tipp Daten in Zellen schreiben gezeigt.
Code im Codebereich der UserForm frmProgress
 
Option Explicit

Private Sub UserForm_Initialize()
  With Me
    .StartUpPosition = 2
    .lblProgress.Height = .fraProgress.Height

    .lblProgressTxt.BackStyle = fmBackStyleTransparent
    .lblProgressTxt.Height = .fraProgress.Height
    .lblProgressTxt.ForeColor = .lblProgress.BackColor
    .lblProgressTxt.TextAlign = fmTextAlignCenter
    .lblProgressTxt.Left = (.fraProgress.Width / 2) - _
              (.lblProgressTxt.Width / 2)

    .cmdOKCancel.Default = True
    .cmdOKCancel.Cancel = True
  End With
End Sub

Private Sub UserForm_Activate()
  g_blnCancel = False

  Me.lblProgress.Width = 0
  Me.lblProgressTxt.Caption = ""

  Me.lblProgressMsg.Caption = _
        "Die Daten werden in die Tabelle eingetragen. " & _
        vbCrLf & "Bitte warten..."

  Call modAddData.AddDataToWKS(ThisWorkbook.Worksheets(1), _
        Me.lblProgress, Me.lblProgressTxt, Me.fraProgress)

  If g_blnCancel Then
    Me.lblProgressMsg.Caption = _
          "Der Vorgang wurde abgebrochen !"
  Else
    Me.lblProgressMsg.Caption = _
          "Der Vorgang wurde erfolgreich abgeschlossen !"
  End If

  Me.fraProgress.Visible = False

  With Me.cmdOKCancel
    .Caption = "OK"
    .Accelerator = "O"
  End With
End Sub

Private Sub cmdOKCancel_Click()
  g_blnCancel = True
  If cmdOKCancel.Caption = "OK" Then
    Unload Me
  End If
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, _
            CloseMode As Integer)
  If Not g_blnCancel Then Cancel = True
  If CloseMode = vbFormControlMenu Then Cancel = True
End Sub
 
Code im Codebereich des Moduls modAddData
 
Option Explicit

Public g_blnCancel As Boolean

Public Sub AddDataToWKS(ByVal wksDest As Worksheet, _
           ByVal lblProgress As MSForms.Label, _
           ByVal lblProgressTxt As MSForms.Label, _
           ByVal fraProgress As MSForms.Frame)

  Const cRowsMax As Long = 1000
  Const cColsMax As Integer = 25

  Dim nRow        As Long
  Dim nCol        As Integer
  Dim nCellsCnt   As Long
  Dim dblProgress As Double

  Dim nRetVal     As Long

  wksDest.Activate
  wksDest.UsedRange.Delete

  nCellsCnt = 1
  For nRow = 1 To cRowsMax
    For nCol = 1 To cColsMax
      wksDest.Cells(nRow, nCol).Value = Int(Rnd * 1000)
      nCellsCnt = nCellsCnt + 1
    Next

    dblProgress = nCellsCnt / (cRowsMax * cColsMax)
    If dblProgress > 0.5 Then
      lblProgressTxt.ForeColor = vbWhite
    End If

    lblProgressTxt.Caption = Format(dblProgress, "0 %")
    lblProgress.Width = dblProgress * (fraProgress.Width)

    DoEvents

    If g_blnCancel Then
      nRetVal = MsgBox("Wollen Sie den Vorgang wirklich " & _
             "abbrechen?", vbYesNo + vbDefaultButton2 + _
             vbQuestion, Title:="VB-fun-Demo Fortschrittsleiste")

      Select Case nRetVal
        Case vbYes
          wksDest.UsedRange.Delete
          Exit Sub

        Case Else
          g_blnCancel = False
      End Select
    End If
  Next
End Sub
 

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
Excel-Version
95
97
2000
2002 (XP)
2003
2007
2010


Download  (28 kB) Downloads bisher: [ 5474 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Freitag, 5. August 2011