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

Macro uitvoeren na vernieuwen van database

Status
Niet open voor verdere reacties.

Ralbers

Gebruiker
Lid geworden
8 jul 2011
Berichten
190
Hallo allemaal,

Ik heb een excel bestand die flinke tabellen uit een database haalt

Ik heb een knop gemaakt waarmee hij kan vernieuwen.
Nu is ie toch wel een halve minuut bezig met dit vernieuwen.
Er moeten dadelijk echter mensen met mijn model gaan werken die dan waarschijnlijk overal op gaan klikken omdat hij heel even niet reageert.

Nu heb ik mbv vba een code geschreven dat hij ergens de tekst bezig neerzet als hij begint met het vernieuwen
Nu is het de bedoeling dat deze tekst vervangen word met klaar als hij alles vernieuwt heeft.
Als ik dat laatste in de code achteraan zet waarbij het de tekst aanpast. Hij doet dit echter direct en niet pas als hij klaar is met verversen.
Is er een manier of stukje code of iets waardoor hij test of hij nog bezig is of iets wat hier op lijkt.

Hieronder zie je de code die ik gemaakt heb
(ik ben nog een beunhaas met dit hele vba dus het zal vast niet de beste code zijn maar het werkt tot op zekere hoogte)

Code:
Sub Vernieuwen2()
  Range("a1").Value = "bezig..."
  ActiveWorkbook.RefreshAll
  sorteren_tabel
  Range("a1").Select
  Range("a1").Value = "klaar"
End Sub

alvast bedankt,

Roel
 
Is dit wat?
Code:
Sub vernieuwen()
    If MsgBox("U heeft ervoor gekozen om de database te vernieuwen." & vbLf & _
              "Dit proces wordt gestart zodra u op OK drukt en kan even duren.", vbOKCancel, "Vernieuwen") = vbOK Then
        ActiveWorkbook.RefreshAll
        sorteren_tabel
        MsgBox "Het vernieuwen is gereed.", vbInformation, "Gereed"
    Else
        MsgBox "U heeft geannuleerd. De database wordt niet vernieuwd.", vbInformation, "Geannuleerd"
        Exit Sub
    End If
End Sub
 
Het is een mooi stukje code
Om een msgbox te gebruiken is sowieso misschien wel goed idee

Helaas werkt het nog niet en is er eigelijk geen verschil

Als je ok klikt geeft hij namelijk direct de melding vernieuwen gereed terwijl die nog bezig is
Het zijn ook meerdere tabellen die zich moeten verversen dus misschien dat dat ook meespeelt
 
Zo beter?
Code:
Sub vernieuwen()
    If MsgBox("U heeft ervoor gekozen om de database te vernieuwen." & vbLf & _
        "Dit proces wordt gestart zodra u op OK drukt en kan even duren.", vbOKCancel, "Vernieuwen") = vbOK Then
        ActiveWorkbook.RefreshAll
        sorteren_tabel
            If Application.CalculationState = xlDone Then
                MsgBox "Het vernieuwen is gereed.", vbInformation, "Gereed"
            End If
    Else
        MsgBox "U heeft geannuleerd. De database wordt niet vernieuwd.", vbInformation, "Geannuleerd"
        Exit Sub
    End If
End Sub
 
Laatst bewerkt:
Het leek veel op de goede uitkomst
Omdat er geen melding kwam direct na de ok knop
er kwam echter helemaal geen melding deze keer:p

Maar ik denk wel dat we op de goede weg zijn
Ik zal eens google op die application.calculationstate
 
Ik heb het even uit gezocht

maar er zijn 3 states die horen bij dat application.calculatestate

naam______________waarde___proces
xlCalculating________1________Calculations in process.
xlDone_____________0________Calculations complete.
xlPending___________2________Changes that trigger calculation have been made, but a recalculation has not yet been performed.
(ik weet niet hoe opmaak van die tabel werkt dus vandaar)

Maar ik heb dus een kleine macro geschreven die de waarde van application.calculatestate aangeeft in een cel
Maar er komt alleen maar de waarde 2 terug
Nooit 1 en nooit 0
Zelfs als ik het bestand net geopend heb
Dus dat zal de reden zijn dat jouw stukje niet werkte
 
Ja, als hij altijd op xlPending blijft dan zal ie niks weer geven.
Misschien omdat je tabel direct verbonden is met de bron dat ie op 'pending' blijft staan. Dat zou ik niet durven zeggen...

Ik weet ook niet zo snel een oplossing hierop, ga nog ff brainstormen :)
 
Ik weet niet precies wat de definitie is van direct verbonden met bron

Maar de tabellen verwijzen naar een database
die worden pas vernieuwt als er op de knop word geklikt
Maar als je het excel bestand opent op een andere computer dus als de verbinding niet aanwezig is dan geeft ie wel de melding van kan gegevens niet vinden enzo
dus er is wel zeker al een verbinding of iets
 
Ik heb het probleem opgelost
en het was echt belachelijk simpel

Ik heb vernieuwen op de achtergrond uitgeschakeld
En nu lijkt het erop dat hij wel precies doet wat hij moet doen

vinkje kun je vinden bij
gegevens/verbindingen/verbindingen/eigenschappen

dus het was helemaal niet nodig om in vba te gaan zitte klooie
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan