Kategorie szkoleń | Egzaminy | Kontakt
  • 2
  • 3
  • 275

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.

  • Zapytał
  • @ | 17.03.2016
  • TRENER ALTKOM AKADEMII

Odpowiedzi (2)

  • 8

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

 

 

Michał_Gwiazdonik
  • Odpowiedział
  • @ Michał_Gwiazdonik | 17.03.2016
    • lider
    • laureat
    • 13
    • 9
    • 51
Komentarze
Ok, próbowałam czegoś podobnego, tylko problem mam taki, że dopiero po zamknięciu formularza (paska postępu) zaczyna mi działać główna procedura. Co z tym zrobić?
Skomentował : @ TRENER ALTKOM AKADEMII ,17.03.2016
Ok, działa.
Skomentował : @ TRENER ALTKOM AKADEMII ,17.03.2016
Świetnie. ;) Cieszę się, że mogłem pomóc. Pozdrawiam.
Skomentował : @ Michał_Gwiazdonik ,19.03.2016
  • 13
  • 9
  • 51
  • 3

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.

Marcin_Rogala
  • Odpowiedział
  • @ Marcin_Rogala | 12.04.2016
    • 2
    • 1
    • 1
Komentarze
Fajne rozwiązanie ale chyba nie będzie działało przy wyłączonym odświeżaniu ekranu i przełączaniu się pomiędzy kilkoma skoroszytami.
Skomentował : @ Michał_Gwiazdonik ,12.04.2016
  • 13
  • 9
  • 51
Dzięki - już sobie poradziłam!
Skomentował : @ TRENER ALTKOM AKADEMII ,12.04.2016