• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Progress bar (voortgangsindicator)

Status
Niet open voor verdere reacties.

duco243

Gebruiker
Lid geworden
8 jul 2009
Berichten
67
Wie kan mij helpen met het volgende:

Ik wil VBA een paar dingen laten doen, tijdens het uitvoeren hiervan wil ik een progress-bar op het scherm de voortgang laat zien.
De code voor de progress bar heb ik al:

Code:
Sub show_progress_bar()
Dim i As Integer
With Prog_bar
    'SET MIN value to 0
    .ProgressBar1.Min = 0
    'SET Max value as per your requirement
    .ProgressBar1.Max = 10000
    .Show vbModeless
    '.ScrollBars = fmScrollBarsVertical
    ' run a loop to display progres bar
    For i = 1 To 10000
        'change the value of progress bar to show the progress using fill color
        .ProgressBar1.Value = i
        ' chnage the caption of user form to display the percentage of task completed
        .Caption = VBA.Format(i / Prog_bar.ProgressBar1.Max, "0%") & "  Complete"
        DoEvents ' DoEvents allows the UserForm to update.
    Next
End With
' task finish unload progress bar
Unload Prog_bar
End Sub




Nu wil ik bijvoorbeeld (om het simpel te houden) van blad1 de celinhoud van A1 naar B1 kopieren, vervolgens van Blad2 ook de celinhoud van A1 naar B1 kopieeren, daarna van Blad3 de celinhoud van A1 naar B1 kopieeren, etc etc tm blad 12

Wie kan helpen de code zo aan te passen (ergens zal wel de sreenupdating uitgezet moeten worden denk ik) dat deze acties op de achtergrond gebeuren terwijl alleen de progressbar zichtbaar is?


Alvast bedankt voor de hulp.


gr.
Duco
 
Laatst bewerkt door een moderator:
Je kunt beter je code zo verbeteren, dat een voortgangsbalk overbodig is.
De introduktie ven een voortgangsbalk vertraagt in ieder geval de afhandeling van je macro.
 
Mbv DoEvents is geen verstandige manier voor een progress bar. Alternatief:
Code:
progbar.show vbmodeless ' initialize het form op 0
' doe iets
progbar.update 0.3
' doe nog meer iets
progbar.update 0.6
' doe het laatste
progbar.update 1.0
progbar.hide
Als je de percentages niet kunt berekenen laat je de progressbar steeds vanaf nul beginnen.
 
progress bar

Hallo pixcel,

Bedankt voor je reactie.
Ik snap de opzet wel volgens mij ( 0.3 = 30% voortgang, 0.6 = 60% enz ) alleen het wil niet echt lukken
Ik ga er vanuit dat de code die ik had kan vervallen en dat jou code hiervoor in de plaats moet komen?
Dan heb ik dus het volgende:

Code:
Sub show_progress_bar()

Prog_bar.Show vbModeless ' initialize het form op 0
    ScreenUpdating = False
    Sheets("Blad1").Select
    Range("A1").Select
    Selection.Copy
    Range("B1").Select
    ActiveSheet.Paste
    ScreenUpdating = True
Prog_bar.Update 0.3
    ScreenUpdating = False
    Sheets("Blad2").Select
    Range("A1").Select
    Selection.Copy
    Range("B1").Select
    ActiveSheet.Paste
    ScreenUpdating = True
Prog_bar.Update 0.6
    ScreenUpdating = False
    Sheets("Blad3").Select
    Range("A1").Select
    Selection.Copy
    Range("B1").Select
    ActiveSheet.Paste
    ScreenUpdating = True
Prog_bar.Update 1#
Prog_bar.Hide

End Sub

De macro geeft een melding bij .Update 0.3 en die luidt: " kan de methode of het gegevenslid niet vinden"
Ook maakt VBA zelf een # van 1.0
Het formulier heet prog_bar dus dat heb ik zelf aangepast.

Wat doe ik fout? Of moet jouw code toch ergens in die bestaande code?
 
Laatst bewerkt door een moderator:
In bijgevoegd bestand zit een knop en een progressbar.
Door op de knop de klikken worden de waardes in cel A1 van de 1e 12 werkbladen ook in cel B1 van de werkbladen geplaatst.

Doordat de macro zo snel gaat, heb ik een timer in de code geplaatst zodat je de voortgang van de progressbar beter kunt volgen.
De noodzaak om een progressbar is mij niet duidelijk. Wellicht als een aardigheidje of trucje.

Met vriendelijke groet,


Roncancio
 

Bijlagen

  • Progressbar.xlsm
    29,2 KB · Weergaven: 290
Mooie snelle oplossing Roncancia om die cellen te kopieëren.

Echter, de macro die ik wil gebruiken moet heel wat meer doen dan van A1 naar B1 kopieëren, dat was maar als voorbeeld zodat ik niet de hele macro-actie hoefde te omschrijven.
Het ging dus om het principe, in 12 werkbladen moet de macro allerlei acties uitvoeren en terwijl dat gebeurt wil ik die voortgangsindicator tonen.
Dat zo'n balk geen nut heeft klopt in zoverre als je het bestand alleen zelf gebruikt maar omdat anderen het gaan gebruiken wil ik graag laten zien dat er iets bezig is en dat men ff moet wachten.
Ik heb er eentje gevonden die ik wil gebruiken, die ziet er gelikt uit en is in office stijl (hier gevonden https://groups.google.com/forum/#!topic/excelvbamacros/zwtzVh4Ryss ) en daar is die bovenste code van. In die code wilde ik ergens mijn macro kwijt.
Dus dan begint de progressbar op 0, na het 1ste blad gaat ie naar 8,5% na het 2de blad naar 17% enz tot 100%, dan zijn die 12 bladen bijgewerkt.

Wat ook zou kunnen is dat die macro loopt voor die 12 bladen en dat je op het scherm de progressbar ziet die een ingestelde tijd loopt, ik zoek dan zelf wel uit hoe lang die macro bezig is en pas de tijd hierop aan.

Maar jouw kopieer oplossing is ook zeer bruikbaar voor mij, thx
 
Laatst bewerkt door een moderator:
Als ik jouw code zie, zit daar het probleem. Een voortgangsbalk is dan helamaal niet nodig.
Er zijn vele methoden in Excel om de uitvoering van je code te versnellen.
 
Hallo snb,

Ik heb die progressbar ook niet nodig om die acties uit te voeren (dat doet de macro wel) maar ik wil gewoon een progress bar i.c.m. mijn macro.
Snelhied is geen issue hierbij.

gr, duco
 
Laatst bewerkt door een moderator:
popipipo;5216916.[/QUOTE zei:
Ik heb die 4 balken bekeken en die werken ook mooi maar buiten dat heb ik hetzelfde problem


IK zoek dus zoiets:

Scherm toont een progreesbar met bijvoorbeeld 12 blokjes
Hij begint op 0
Dan gaat een macro vanalles doen op blad 1 maar dat zie je niet, je blijft de progressbar zien
In de progressbar komt blokje 1
Dan gaat de macro vanalles doen op blad 2
In de progressbar komt blokje 2
Dan gaat de macro vanalles doen op blad 3
In de progressbar komt blokje 3
Dan gaat de macro vanalles doen op blad 4
In de progressbar komt blokje 4
Dan gaat de macro vanalles doen op blad 5
In de progressbar komt blokje 5
Dan gaat de macro vanalles doen op blad 6
In de progressbar komt blokje 6
Dan gaat de macro vanalles doen op blad 7
In de progressbar komt blokje 7
Dan gaat de macro vanalles doen op blad 8
In de progressbar komt blokje 8
Dan gaat de macro vanalles doen op blad 9
In de progressbar komt blokje 9
Dan gaat de macro vanalles doen op blad 10
In de progressbar komt blokje 10
Dan gaat de macro vanalles doen op blad 11
In de progressbar komt blokje 11
Dan gaat de macro vanalles doen op blad 12
In de progressbar komt blokje 12 = 100%

Ik hoop dat het nu wat duidelijker is geworden wat ik bedoel.

En ik wil deze progressbar gebruiken

SNAG-0487.jpg






gr.

duco
 
Laatst bewerkt:
Lees mijn bericht nog eens rustig door......
 
Kijk de bijlage eens rustig door...
 

Bijlagen

  • Simple Progressbar.xlsm
    20,4 KB · Weergaven: 245
Frans,

ik heb zojuist een test gedaan en het werkt perfect op een klein dingetje na.
Op de achtergond (de progressbar staat mooi op de voorgrond) vliegen de selecties en de schermen van hot naar haar.
Is dit zo aan te passen dat ik alleen de progressbar zie met op de achtergrond het scherm waarin ik de macro opstart of anders met een neutrale (lees stilstaande) achtergrond?
Na elke progressbar-update een screenupdate = false werkt niet. Onderstaand een stukje van de code.

Code:
Public Sub DoeHet()

    FProgressbar.Show vbModeless
    FProgressbar.Update 0
    
    Sheets("A13").Select
    Range("U49").Select
    Selection.Copy
    Range("U49").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("BK4:BK32").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("BK4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    
    Application.Wait Now + TimeValue("0:00:01")
    FProgressbar.Update 0.1
 
Is dit zo aan te passen dat ik alleen de progressbar zie met op de achtergrond het scherm waarin ik de macro opstart of anders met een neutrale (lees stilstaande) achtergrond?
Ja, door je code op te schonen. Lees de berichten van snb nog eens rustig door... en met name de tweede tip in zijn handtekening.
 
En o ja, die Wait was er alleen voor demo doeleinden, die moet je dus verwijderen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan