• 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.

Voortgang statusbalk vba

Status
Niet open voor verdere reacties.

Marky76

Gebruiker
Lid geworden
26 okt 2002
Berichten
424
Beste,
In onderstaande code zou ik graag hebben dat ik de vooruitgang van de macro kan zien, want in het bestand dat ik deze code gebruikt duurt het even. En zou dit graag met een
% zien voortgaan. Heb in het vet de code gezet die ik zou kunnen gebruiken als voorbeeld, alleen lukt het me niet om hem te doen werken.

Code:
Sub zoek_rekening()
Dim b As Range
Dim laatsteregel1 As Long
Dim laatsteregel2 As Long
Dim legeregel As Long
Dim teller As Long
Dim c As Range

Application.ScreenUpdating = False
Application.DisplayStatusBar = True

[B]Application.StatusBar = Format(i / aantal, "0%") & " gereed"[/B]

teller = 0
laatsteregel1 = Sheets("Laatste rekenplan").Range("A65536").End(xlUp).Row

    For Each b In Sheets("Laatste rekenplan").Range("A2:A" & laatsteregel1)
        If b <> "" Then
            laatsteregel2 = Sheets("Oud rekenplan").Range("A65536").End(xlUp).Row
            With Sheets("Oud rekenplan").Range("A2:A" & laatsteregel2)
            Set c = .Find(b.Value, LookIn:=xlValues)
                If c Is Nothing Then
                    legeregel = Sheets("Nieuwe rekeningen").Range("A65536").End(xlUp).Row + 1
                    Range("A" & b.Row).Copy Sheets("Nieuwe rekeningen").Range("A" & legeregel)
                    teller = teller + 1
                End If
            End With
        End If
    Next

MsgBox "Er zijn " & teller & " nieuwe rekeningen aangetroffen!"

Sheets("Nieuwe rekeningen").Activate

   
Application.ScreenUpdating = True
Application.DisplayStatusBar = False
End Sub

Greetz, Mark
 
Mark,

VBA is nog niet mijn specialiteit, maar probeer eens de statusbalk buiten het Application.ScreenUpdating = False te zetten.

Richard
 
Richard1970, Nope... de statusbar reageert niet op het screenupdating = false. Het is zelfs een goed idee om de statusbalk de voortgang te laten tonen bij een 'stilstaand' beeld. Dan weet je in iedergeval dat er nog iets gebeurt met de code.:thumb:

Marky76, 2 dingen om 't wel te laten werken.
1) Je roept 2 variabelen aan in je functie, namelijk 'i' en 'aantal'. Waar 'vul' je deze variabelen? ZO zal het natuurlijk nooit werken.:rolleyes:
2) Je moet de opdrachtregel in je For...Each lus zetten. Het is namelijk de bedoeling dat er zo continu een berekening plaatsvindt van het gegeven dat je wilt tonen.
Dus zal je op zoek moeten gaan naar de data die zorgt voor het bepalen van het percentage. Ik zie zo ff niet wat je code allemaal doet, dus ik geef maar gewoon een voorbeeld.
Stel dat je een aantal gevulde cellen (in range A1:A5000) in je worksheet wilt kleuren. Dan laat je eerst een teller lopen die het aantal gevulde cellen in die range gaat bepalen. Stel dat dat er 4200 zijn (de variabele 'aantal' is hiermee gevuld). Vervolgens ga je je For...Each lus in. Hier laat je een teller meelopen die steeds met 1 wordt opgehoogd bij het doorlopen van de lus. Die teller is dus je variabele 'i'. En je deling kan nu wel plaatsvinden. Zet je opdrachtregel van de statusbar ergens na het ophogen van je teller maar wel binnen je lus!

Zet trouwens direct na je lus de statusbar weer op "" (dubbele quote), anders blijf je het laatste percentage de rest van de tijd zien.

Succes met puzzelen.(maar volgens mij moet het zo lukken)

Groet, Leo
 
Laatst bewerkt:
Dag allen

Hetgeen niet in de lus hoort, en eenmalig gedaan wordt, zet je best buiten de lus.

Application.DisplayStatusBar = True gaat trouwens niet veel doen om de status te tonen ;)

Verder nog een aantal middeltjes in de code gezet om het te versnellen.

Ik ga voor:

Code:
Sub zoek_rekening()

    Dim b As Range
    Dim laatsteregel1 As Long
    Dim laatsteregel2 As Long
    Dim legeregel As Long
    Dim teller As Long
    Dim c As Range
    Dim rZoekBereik As Range

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        [B].Calculation = xlCalculationManual[/B]
    End With

    teller = 0
    laatsteregel1 = Sheets("Laatste rekenplan").Range("A65536").End(xlUp).Row
    [B]laatsteregel2 = Sheets("Oud rekenplan").Range("A65536").End(xlUp).Row
    Set rZoekBereik = Sheets("Oud rekenplan").Range("A2:A" & laatsteregel2)[/B]
    
    For Each b In Sheets("Laatste rekenplan").Range("A2:A" & laatsteregel1)
    
        [B]Application.StatusBar = Format((b.Row - 2) / (laatsteregel1 - 1), "0%") & " gereed"[/B]
        
        If b.Value <> "" Then
            
            With [B]rZoekBereik[/B]
                Set c = .Find(b.Value, LookIn:=xlValues)
                If c Is Nothing Then
                    legeregel = Sheets("Nieuwe rekeningen").Range("A65536").End(xlUp).Row + 1
                    Range("A" & b.Row).Copy Sheets("Nieuwe rekeningen").Range("A" & legeregel)
                    teller = teller + 1
                End If
            End With
        End If
    Next
    
    MsgBox "Er zijn " & teller & " nieuwe rekeningen aangetroffen!"
    
    Sheets("Nieuwe rekeningen").Activate
    
    With Application
        [B].StatusBar = False[/B]
        [B].Calculation = xlCalculationAutomatic[/B]
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub

Uiteraard ongetest want geen bronbestand (al komt de code mij wel bekend voor ;))

Wigi
 
Nergens vind ik het Event: DoEvents terug in de code. Welke belangrijk is in deze voor de "MultiTasking" die nodig is.
 
Nergens vind ik het Event: DoEvents terug in de code. Welke belangrijk is in deze voor de "MultiTasking" die nodig is.

En wat is hier dan het nut / doel van, de code hierboven werkt toch ook zonder? (ttz, ik heb de code niet getest want ik heb het bronbestand niet, maar ik vermoed sterk dat de code werkt). Wil er zelf ook wat van bijleren ;)

Wigi
 
Deze zorgt er voor dat er meerdere handelingen tegelijk worden uitgevoerd. In dit geval het verwerken van de progressbar en lezen van de inhoud per regel.

Kijk maar eens naar deze plugin-die ik heb gebouwd: http://office.webforums.nl/forum/viewtopic.php?t=21392
Deze maakt veelal gebruik van deze Event. Zonder de DoEvents worden de afbeeldingen pas aan het eind van het verhaal geladen. Zorg er overigens wel voor dat je meer dan 50 afbeeldingen gaat laden.... dan wordt het verhaal pas echt leuk.
 
Bedankt, dat is helder nu. Weer wat bijgeleerd

Wigi
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan