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

Check of programma loopt

Status
Niet open voor verdere reacties.

martindeboer1988

Gebruiker
Lid geworden
5 nov 2016
Berichten
93
Beste leden,

Ik heb een excel sheet welke data haalt uit een acces database onder andere.
Om deze data te laten ophalen mag de gebruiker niet het bestand waar de data uit komt al hebben draaien.
Is er een mogelijkheid om Excel te laten checken of het programma MS Acces actief is?

Voor nu heb ik onder de Thisworkbook module onderstaande code.
Maar dit zou ik graag anders willen hebben.

Code:
MsgBox "Wanneer je deze tool gebruikt zorg er dan wel voor" & vbNewLine & "dat je Desktop Lending niet open hebt staan. Wanneer dit wel het geval is sluit" & vbNewLine & "dan de tool en Desktop Lending en open de tool opnieuw."
 
Moet Access sluiten, of mag het niet actief zijn (on top)?
Als Access de focus heeft tijdens de code leg je de focus met onderstaande coderegel weer naar Excel.
Code:
AppActivate ("Microsoft excel")
 
Controleren kan ook zo:
Code:
Dim accAccess As Object
On Local Error Resume Next
Set accAccess = GetObject(, "Access.Application")
If Err.Number = 0 Then accAccess.Quit
On Local Error Goto 0
 
Laatst bewerkt:
Wanneer ik die code erin zet @edmoor krijg ik inderdaad de check waarna Excel vraagt of ik een ander bestand wil selecteren omdat het bestand al in gebruik is.
Wat ik graag zou willen is dat Excel checkt of het programma actief is en die dan afsluit voordat er fouten in excel ontstaan.
 
Als je het doet zoals ik in #4 liet zien moet het goed gaan.
Wel heb ik er voor de zekerheid de On Error aangepast en er nog een extra regeltje onder gezet omdat ik niet kan zien hoe je het in je eigen code hebt ingepast.
 
Laatst bewerkt:
Dan zou onderstaande voldoende kunnen zijn.
Code:
Sub hsv()
 On Error Resume Next
 GetObject(, "Access.Application").Quit
End Sub
 
Inderdaad, maar dan blijft nog steeds de Error status aan. Die kan dan beter worden uitgezet. En als het in een routine is die door een andere is aangeroepen dan kan je beter On Local Error gebruiken.
 
Heb de code nu als volgt onder de Thisworkbook module.
Alles werkt nu zoals gewenst, bedankt voor de hulp maar weer :)

Code:
Private Sub Workbook_Open()
ActiveSheet.Range("D18") = Environ("Username")
Dim accAccess As Object
On Local Error Resume Next
Set accAccess = GetObject(, "Access.Application")
If Err.Number = 0 Then accAccess.Quit
On Local Error GoTo 0
End Sub
 
In dat geval mag je de woorden Local weg laten :-)
 
Plus de "if" statement.

@edmoor, De Local gebruik ik nooit, kan er zelfs niets over vinden in de Help van Vba.
 
Als je een routine (2) aanroept vanuit routine (1) en je zet in routine (2) een On Error dan geldt deze ook voor routine (1). Wil je dat niet dan moet je in routine (2) On Local Error gebruiken.

Wat die If betreft, die kan daar inderdaad ook weg, tenzij er nog op de error code moet worden gecontroleerd.
Maar dat is meer een opmerking voor TS als deze die routine nog eens wil gaan aanpassen of uitbreiden.
 
Laatst bewerkt:
Ik zal eens wat gaan testen; bedankt.
 
Nog eens naar gekeken en ik heb het altijd zo gebruikt maar het lijkt erop dat het keyword Local in de On Error in de latere versies van VB(A) obsolete is en alleen nog aanwezig voor backward compatibility.
 
Laatst bewerkt:
Zoals je het omschrijft klopt het in onderstaande codes niet.
In de eerste krijg ik de foutmelding
Code:
Sub hsv()
  hsvtwee
 GetObject(, "Access.Application").Quit
End Sub


Sub hsvtwee()
On Error Resume Next
  GetObject(, "Access.Application").Quit
End Sub

Zo werkt het voor beide routines.

Code:
Sub hsv()
On Error Resume Next
  hsvtwee
 GetObject(, "Access.Application").Quit
End Sub


Sub hsvtwee()
  GetObject(, "Access.Application").Quit
End Sub
 
Zie m'n vorige bericht ;)
 
Duidelijk. ;)

Zou Martin na deze dwaling de code al ingekort hebben?
 
Geen idee uiteraard, maar ik verwacht het niet ;)

Overigens is de code die ik maak en onderhoud nog steeds compatible met Office 2003 t/m Office 2016.
Die Local blijf ik daarom dus gewoon gebruiken :)
 
Laatst bewerkt:
If it ain't broke, don't fix it :D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan