|
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: [ 5675 ]
|
|
|