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

VBA code naar volgende stap nadat alles is gerefreshed

peter59

Terugkerende gebruiker
Lid geworden
21 mei 2007
Berichten
2.757
Besturingssysteem
Windows 11
Office versie
Office 365
Ik ben bezig met een VBA-code die enkele seconden wacht, zodat alles de tijd krijgt om te verversen.
De onderstaande code is opgenomen met de macrorecorder, maar helaas loop ik daar vast.
Wie kan mij verder helpen? Alvast bedankt!
Code:
Sub Macro1()

    ActiveSheet.Unprotect
    ActiveWorkbook.RefreshAll
    
'wacht +/- 5 sec. zodat alles gerefreshed is en dan pas de beveiliging erop zetten
    
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
    
End Sub
 
Zet in de properties van de query dat background refresh niet toegestaan is(Vinkje uitzetten). De code wacht dan ook
 
Dat is natuurlijk niet de bedoeling.

Het werkblad bevat verschillende lijsten en tabellen, waaronder een querytabel.
In het hele werkblad zijn de cellen beveiligd of geblokkeerd, behalve de betreffende querytabel.
Deze heeft wat tijd nodig om te verversen, maar de VBA-code loopt gewoon door, waardoor de tabel niet de tijd krijgt om te verversen en het proces wordt afgebroken.
 
zet er 1 of meerdere doevents achter
Uitgebreid (BBCode):
 ActiveWorkbook.RefreshAll
 doevents:doevents:doevents
 
Waarom is dat niet de bedoeling dan? Het doet verder niets anders.
 
Inderdaad.
Dat vinkje uit, dan wacht de code tot de query gereed is.
 
Gewoon vinkje uitzetten. Sterker nog, wanneer de query eens langer werk heeft dan normaal, zal hij alsnog falen bij gebruik van ingebouwde wachttijden
 
Gebruik desnoods een klassemodule (bijv clsModQT) voor de afhandeling van het bijwerken.
Maak een instantie van de klassemodule.
Wijs de Querytabel toe aan de klassemoduleinstantie.

Code:
Public WithEvents qt As QueryTable
Private Sub qt_AfterRefresh(ByVal Success As Boolean)
    MsgBox qt.Destination
End Sub


' in het werkblad
Code:
Dim X As New ClsModQT

Sub initialiseer()
  Set X.qt = ThisWorkbook.Sheets(2).QueryTables(1)
End Sub
 
Terug
Bovenaan Onderaan