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

Onderdrukken pop-up's t.g.v. datasource.errors

Status
Niet open voor verdere reacties.

Ruudh59

Gebruiker
Lid geworden
30 nov 2013
Berichten
56
Na een refresh van een query wordt een macro gestart volgens onderstaande methode.
Dat werkt prima. Alleen krijg ik af en toe een datasource.error in de vorm van een pop-up.
De pop-up vereist handmatig handelen, dus het proces stopt.
Weet iemand een manier om de pop-up's te onderdrukken?


Methode:
Met de module PutOn wordt het proces gestart en de macro 'Verwerk' opgestart na een refresh van de query in het blad "LOAD".

Module: Puton

Public FollowQT As Qclass
Sub PutOn()
Set FollowQT = New Qclass
Set FollowQT.myQT = Worksheets("LOAD").ListObjects(1).QueryTable
End Sub


Klassenmodule: Qclass

Private WithEvents QT As Excel.QueryTable
Public Property Set myQT(MyQuery As Excel.QueryTable)
Set QT = MyQuery
End Property

Private Sub QT_AfterRefresh(ByVal Success As Boolean)
Debug.Print "AfterRefresh"
If Success Then Verwerk
End Sub

Private Sub QT_BeforeRefresh(Cancel As Boolean)
Debug.Print "BeforeRefresh"
End Sub
 
Er zijn verschillende oorzaken, maar ze zijn allemaal van de categorie [datasource.error].
Een voorbeeld is: "Kan geen verbinding met externe server maken".
Zijn allemaal van tijdelijke aard, misschien veroorzaakt door timing-issues, maar ze doen wat mij betreft niet ter zake; ik wil ze gewoon negeren.
 
Dit bericht wordt door Excel gegenereerd en kan voor zover ik kon vinden niet worden voorkomen.
 
Ik doe het zö:

Code:
Dim X As New Qclass

Sub PutOn()
   Set X.qt = sheets("LOAD").ListObjects(1).QueryTable
End Sub


Klassemodule: Qclass

Code:
Public WithEvents qt As Excel.QueryTable

Private Sub qt_AfterRefresh(ByVal Success As Boolean)
   Debug.Print Success
End Sub

Private Sub qt_BeforeRefresh(Cancel As Boolean)
   Debug.Print "BeforeRefresh"
End Sub
 
Laatst bewerkt:
Dat kun jij testen....
Hier krijg ik er in ieder geval geen.
 
Ik krijg er wel een als ik een query maak (Gegevens ophalen, uit bestand) en die met opzet om zeep help door het pad naar het bestand foutief aan te passen. De enige manier die ik vind om vernieuwen zonder foutmeldingen te doen is deze:
Code:
Sub foobar()
    On Error Resume Next
    ActiveCell.ListObject.QueryTable.Refresh False
    On Error Goto 0
End Sub
 
snb:
Ik heb jouw code 1 op 1 overgenomen.

Ik krijg de compileerfout bij het uitvoeren van puton: "Kan de methode of het gegevenslid niet vinden" met ".qt =" gemarkeerd.
 
Ik denk even "hardop"
Die errors zijn "remote" en kun je volgens mij niet veel mee, maar kun je de errors wel afvangen als je QueryTable.refresh handmatig draait? (niet getest)

Dan zou je een simpele (extra) connectie naar een ander werkboek in dezelfde folder kunnen maken (dus kans op errors klein) , deze automatisch laten refreshen en in het Afterrefresh-event van deze query de "handmatige" refresh aanroepen?


Code:
Sub MyRefresh()
On Error GoTo Myerr:
        Worksheets("LOAD").ListObjects(1).QueryTable.Refresh BackgroundQuery:=False
On Error GoTo 0
Myerr:
        Resume Next
debug.print "er was een error maar we gaan door..."
End Sub
 
Verander
Private WithEvents qt As Excel.QueryTable

in

Public WithEvents qt As Excel.QueryTable
 
De methode van snb veroorzaakt ook pop-ups.

De mogelijke oplossing van E v R is wel interessant.
Dat ga ik proberen als ik daar tijd voor heb over een paar dagen.
Een eenvoudiger query als "MOTOR" en de gewenste query handmatig uitvoeren.
Wordt vervolgd.
 
jkpieterse: ja, dezelfde foutafhandeling, maar m.n. de handmatige refresh was een eye-opener. Sowieso moet nog bekeken worden of de foutafhandeling werkt (met een handmatige refresh). De extra (eenvoudiger) query is dan weer nodig om het proces aan de gang te houden. We gaan het zien. Allemaal bedankt voor de tips.
 
Bij mij werkt die on error resume next wel. Met een timer is het eenvoudig genoeg om deze handmatige refresh op gezette tijden te laten uitvoeren of bij openen bestand e.d.
 
Goed te horen dat de on error resume next werkt. Ik heb een timer geprobeerd, maar het nadeel daarvan is dat daardoor de werkmap verder niet toegankelijk is; een module is voortdurend actief, hetzij met bewerkingen, hetzij met wachten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan