Hej.
Chcę zrobić progressbar. Zadowolę się nawet tabliczką z napisem: Czeka, program działa. Nie musi być paska postępu (choć byłoby cudnie). Jak to zrobić?
Będę wdzięczna za pomoc!
Pozdrawiam.
Malina.
Hej.
Ja używam takiego:
Do poniższego formularza przypisujesz sobie główny kod. W tym wypadku: Call GenerateRandomNumbers.
Tak jak poniżej:
Private Sub UserForm_activate() Call GenerateRandomNumbers End Sub.
Sub GenerateRandomNumbers() ' Wstawia liczby losowe do aktywnego arkusza. Dim Counter As Integer Const RowMax As Integer = 500 Const ColMax As Integer = 40 Dim r As Integer, c As Integer Dim PctDone As Single If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub Cells.Clear Counter = 1 For r = 1 To RowMax For c = 1 To ColMax Cells(r, c) = Int(Rnd * 1000) Counter = Counter + 1 Next c 'Tutaj ustalasz jak ma działać postęp. PctDone = Counter / (RowMax * ColMax) Call UpdateProgress(PctDone) Next r Unload UserForm1 End Sub Sub UpdateProgress(Pct) With UserForm1 .FrameProgress.Caption = Format(Pct, "0%") .LabelProgress.Width = Pct * (.FrameProgress.Width - 10) .Repaint End With End Sub
Poniższą część przypisujesz np. do przycisku w arkuszu:
Sub ShowUserForm() With UserForm1 ' Użyj koloru z bieżącego motywu arkusza. .LabelProgress.BackColor = ActiveWorkbook.Theme. _ ThemeColorScheme.Colors(msoThemeAccent1) .LabelProgress.Width = 0 .Show End With End Sub
Witam!
Ja proponuję mniej spektakularne, ale dużo prostsze rozwiązanie przy pomocy właściwości StatusBar:
Dim dane as Integer Dim i as Integer dane = 200 ' oczywiście to tylko przykład For i = 1 To dane Application.StatusBar = "Trwa aktualizacja danych ... wykonano " & Format(i / dane, "0%") ' tutaj cały kod który ma się wykonywać w ramach pętli next i Application.StatusBar = ""
Nie ma paska postępu, ale na dolnym pasku jest aktualna informacja o % wykonaniu kodu.
Pozdrawiam.