CC1 – ProgressBar
ProgressBar to kontrolka ActiveX z zestawu biblioteki Common Controls 1 (plik mscomctl.ocx) dla kompilacji Office 32/64 bit.
Zadajmy sobie pytanie: Po co nam pasek postępu?
Z jednej strony zabawne pytanie, ponieważ oczekujemy że kod jaki napiszemy będzie wykonywał zadanie w mgnieniu oka, ale z drugiej oczywiste, ponieważ jeśli już zasmakujemy mocy automatyzacji zechcemy wykorzystywać ją do coraz cięższych przedsięwzięć. W tedy pasek postępu będzie uświadamiał użytkownika, w tym, iż kod realizuje swoje zadanie pokazując ile już zostało zrobione i ile w podobnym przybliżeniu pozostaje do wykonania.
Po dodaniu kontrolki do zestawu Toolbox zaznaczamy jej symbol i rysujemy w formie kształt paska postępu (szerokość oraz wysokość). Jak widać na poniższych 4-rech przykładach mogą one wyglądać inaczej za sprawą parametrów ustawienia opcji Appearance oraz BorderStyle. Dodatkowo mniej popularny parametr to Orientation, który daje możliwość ustawienia kontrolki w pionie, a parametr Scrolling likwiduje przerwy w blokach postępu aby przechodzenie realizowane było płynnie.
Istotnym parametrem kontrolki jest wartość .Max, ustawiony domyślnie na wartość 100, przygotowany pod wartość procentową. Zwykle jednak wielkość tą zmieniamy, przypisując do niej maksymalną ilość wierszy, plików, elementów do przerobienia w naszym procesie jaką musimy określić przed uruchomieniem iteracji parametru .Value tej kontrolki.
W takim razie, poniżej przedstawiam przykład pracy takiej kontrolki, dzięki któremu możemy zrozumieć jej działanie. Kontrolką ActiveX steruje kod VBA, który w warunkach tego pokazu najlepiej zobrazować przy pomocy edycji danych na zakresie danych zapisanych w arkuszu Excela. Taka edycja realizowana jest pętlą, od pierwszego do ostatniego rekordu. Ostatni rekord, który możemy wyliczyć, będzie naszym parametrem Max. Istotną komendą w pętli będzie doevents, która polega na zignorowaniu efektu zamrożenia formy podczas przebiegu w pętli. Zatem umieszczenie jej wewnątrz pętli jest niezbędne.
Przygotowujemy dane w arkuszu (np niech to będą nazwy miesięcy – ilość dowolna). Następnie, developerze VBA budujemy formę z jednym paskiem postępu oraz przyciskiem do którego podłączymy kod realizacji zadanie. Zadaniem będzie zaznaczenie kolorem komórek, które zawierają literę “e”.
Private Sub CommandButton1_Click() 'nasz przycisk Uruchom
Dim x&, max_r& 'deklaracje zmiennych
max_r = Cells(Rows.Count, "a").End(xlUp).Row 'wyznaczenie ostatniej zajętej komórki kolumny A
ProgressBar1.value = 0 'zerujemy wartości jeśli zakładamy wielokrotne uruchamianie
ProgressBar1.Max = max_r 'ustawienie max dla kontrolki
For x = 1 To max_r 'pętla od 1 do max wierszy
DoEvents 'odświeżenie
ProgressBar1.Value = x 'przekazanie parametry do pętli
If InStr(1, Cells(x, "a"), "e") Then _
Cells(x, "a").Interior.Color = vbYellow 'jeśli komórka zawiera literę "e" zaznacz kolorem
Next 'koniec pętli
End Sub
Zakładając działanie pow kodu, tak wygląda przebieg wartości w kontrolce ProgressBar, który został uchwycony w trakcie mniej więcej 2/3 zakresu.
Jeśli potrzebujesz więcej przykładów zastosowania paska postępu, to w tym artykule zawarłem przykład otwierania kilku plików w zadeklarowanym katalogu, np w celu pobierania lub zmiany danych. Każdy z nich jest motorem dla paska postępu.
Jeśli uważasz że pokazane materiały są godne polecenia – podziel się tą wiadomością z innymi pozostawiając odnośnik to tego materiału.
(c) Shon Oskar – http://VBATools.pl
Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.