Wydaje mi się, że każdy programista pisząc swoją pierwszą dłuższą procedurę (dłuższą w zakresie ilości kodu, ale też szczególnie długiego czasu jej wykonywania), która to procedura ma trafić do innego użytkownika myśli o tym, aby dodać do aplikacji informację o postępie wykonania operacji. Koncepcja ta jest ze wszech miar słuszna, ale nie każde rozwiązanie jakie zastosujemy pozostaje właściwym. Osobiście jestem zwolennikim minimalizmu w tym zakresie zgodnie z którym zamiast wyskakujących okien opartych o formularze wykorzystajmy po prostu pasek stanu (Status Bar) naszej aplikacji, szczególnie, że metoda ta również może być efektywna.
Rozwiązanie uwzględnia dwie koncepcje. Wystarczy w poniższej linii
1 | Application.StatusBar = pasekTXT... |
wybrać jeden z wariantów:
pasekTXT_A -który postęp będzie wyświetlał jako tekst
"Wykonano: xx.0%"
pasekTXT_B -który postęp wykonania wyświetli jako układ symboli
>||||| <
Poniższy kod to przykład stworzony wyłącznie w celach prezentacyjnych. Adaptacja do własnych potrzeb wydaje się być jednak bardzo łatwa.
01 | Sub Pasek_Postępu_StatusBar() |
06 | Dim pasekTXT_A As String |
07 | Dim pasekTXT_B As String |
08 | Dim długośćTXT_B As Byte |
15 | pasekTXT_A = "Wykonano: " & Format(i / loopEnd, "00.0%" ) |
19 | pasekTXT_B = ">" & String (Int((i / loopEnd) * długośćTXT_B), "|" ) & _ |
20 | String (długośćTXT_B - Int((i / loopEnd) * długośćTXT_B), " " ) & "<" |
22 | Application.StatusBar = pasekTXT_B |
25 | Application.Wait Now + TimeValue( "00:00:01" ) |
29 | Application.StatusBar = False |
Wszystko fajnie działa. Dzięki.
OdpowiedzUsuńJedyne co zmieniłem to ten fragment kodu:
Application.Wait Now + TimeValue("00:00:01")
bo mi dość mocno przedłużało wykonanie samej aplikacji.