Wachten met uitvoeren van de rest van de macro tot regel klaar is

Status
Niet open voor verdere reacties.

Ralbers

Gebruiker
Lid geworden
8 jul 2011
Berichten
190
Hallo allemaal,

Ik heb een macro gemaakt die bepaalde dingen exporteert naar pdf. Hiervoor moet echter eerst de bron bijgewerkt worden.
Dit duurt eventjes omdat er meerdere tabellen geraadpleegd moeten worden.
Vervolgens voert hij een macro uit die een aantal gegevens exporteert naar pdf

in principe krijg je dus de verzamel macro:

Code:
sub ideaal()
        refresh_all
        pdf_maken
end sub

Maar nu duurt dat bijwerken dus best wel eventjes. Hij begint echter meteen met de volgende regel het exporteren van de gegevens.Maar aangezien het bijwerken nog niet klaar is gebruikt hij hier de oude gegevens voor.

Het is dus eigenlijk de bedoeling dat hij deze 2e regel pas doet als de 1e klaar is.
Nu heb ik wel iets geprobeerd met een vertraging dat werkt opzich redelijk
Maar is niet precies wat ik wil
Er is vast wel iemand die een regeltje code weet waarbij getest word of het systeem bezig is of net wat

Code:
Sub pdf_auto()
        refresh_all  
        alerttime = Now + TimeValue("00:00:40")
        Application.OnTime alerttime, "pdf_2"
End Sub

sub pdf_2()
        MsgBox = "Hallo"
        pdf_maken 
        Sheets(23).Select
end sub


Alvast bedankt

Groeten Roel
 
Ik weet niet waarom je niet de PDF aanmaken aanroept aan het einde van de refresh all functie? Dan weet je altijd wanneer alles gereed is.

Mocht dat om wat voor reden niet kunnen zou je een soortgelijke constructie hieronder kunnen toepassen. Ik zou er misschien nog een timeout in bouwen.

Code:
Dim IsBusy as Boolean = False

sub ideaal()
        ' refresh all, hier wordt dan de IsBusy in gezet
        refresh_all

        ' blijf wachten tot refresh all klaar is. 
        Dim try As integer = 1
        While IsBusy 
              Thread.Sleep(1000)
        End while
         
        
        pdf_maken
end sub

// in de refresh_all functie

sub refresh_all()
      IsBusy = True

      ' info verzamelen en refreshen

      IsBusy = False
end sub

Maar nogmaals: ik zou het gewoon aanroepen aan het eind van de refresh_all functie
 
Beide methodes hebben nog steeds hetzelfde effect

Code:
Sub pdf_auto()
Dim van As Date
Dim dag As Date
Dim isbusy As Boolean
isbusy = True
Application.ScreenUpdating = False
ActiveWorkbook.RefreshAll
herberekenen
Application.ScreenUpdating = True
isbusy = False

Sheets(24).Select
van = Range("O3").Value
dag = van - 1
Range("o6").Value = dag
While isbusy
    thread.sleep (1000)
Wend

MsgBox "Time expired"


End Sub

Dit is de volledige code die ik nu heb
ipv die msgbox moet natuurlijk een andere actie komen maar dat is niet relevant

nog steeds geeft hij vrijwel direct een bericht omdat hij meteen die isbusy weer op false zet
als je dan ok klikt zie je dat hij nog bezig is de verschillende tabellen te vernieuwen
 
Laatst bewerkt:
Ik heb een oplossing gevonden
Als ik bij de tabellen vernieuwen op de achtergrond uitschakel dan wacht hij wel tot alles klaar is

Het nadeel heirvan is natuurlijk dat hij het vernieuwen niet meer op de achtergrond uitvoert:p maja dat zal ik dan maar voor lief nemen
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan