Bjoern schrieb am 11.12.2006
> Habe mir schon den Wolf gegoogelt, aber nichts gefunden, was funktioniert.
>
> Ich transferiere per VBA aus Excel 2003 bestimmte Daten in eine
> Access-Datenbank. Nun möchte ich vorher gerne prüfen, ob diese Access-Datei
> bereits geöffnet ist.
>
> Kann mir jemand helfen?
Prüfe z.B. via den DIR-Befehl, ob im betreffenden Ordner eine gleichnamige
.ldb-Datei existiert.
Solange die .mdb (von Access) geöffnet ist exisitert diese Datei.
Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Erstmal danke für die superschnelle Antwort!
Diesen Code hatte ich beim Googlen auch schon mehrfach gefunden, aber er
funktioniert irgendwie nicht. Egal ob die Datei geöffnet ist oder nicht, ich
bekomme immer die fehlernummer 0 geliefert.
Ich hab's jetzt mal einfach mit ner Textdatei probiert, die im
Stammverzeichnis von c: liegt. Entsprechend habe ich den Code angepasst.
Hier isser:
Sub IstMappeGeoeffnet()
On Error Resume Next
Err.Clear
Dim File%: File = FreeFile
Open "c:\ready.txt" For Binary Access Read Lock Read As #File
Close #File
MsgBox Err.Number
Select Case Err.Number
Case 0
Case 70: MsgBox "Datei ist bereits offen"
Case 76: MsgBox "Datei nicht gefunden"
Case Else: MsgBox "Anderer Fehler"
End Select
End Sub
wie gesagt, ich bekomme immer '0' als Fehlernummer ausgegeben.
Mache ich hier jetzt einen Denkfehler? Kann doch nicht sein, dass ich den
praktisch gleichen Code immer wieder finde, und der nie funktioniert.
Viele Grüße,
Björn
"stefan onken" wrote:
> hallo Björn,
> probier es mal mit diesem Code (Pfad/Dateiname anpassen)
> http://tinyurl.com/yfvjuo
>
> Gruß
> stefan
>
> "Bjoern" schrieb:
>
> > Moin!
> >
> > Habe mir schon den Wolf gegoogelt, aber nichts gefunden, was funktioniert.
> >
> > Ich transferiere per VBA aus Excel 2003 bestimmte Daten in eine
> > Access-Datenbank. Nun möchte ich vorher gerne prüfen, ob diese Access-Datei
> > bereits geöffnet ist.
> >
> > Kann mir jemand helfen?
> >
> > Danke und viele Grüße,
> >
> > Björn
Auch Dir zuerst vielen Dank für die schnelle Antwort! Leider funktioniert
Dein Tipp in meinem Fall nicht, da die Datei im Netz liegt, und auch andere
darauf zugreifen. Und damit liegt die ldb-Datei auch dort, wenn ich selbst
die zugehörige Datenbank gar nicht geöffnet habe.
Entscheidend für mich ist, dass die Datei auf meinem lokalen Rechner offen
ist.
Trotzdem nochmal danke und viele Grüße,
Björn
"Thomas Ramel" wrote:
> Grüezi Bjoern
>
> Bjoern schrieb am 11.12.2006
>
> > Habe mir schon den Wolf gegoogelt, aber nichts gefunden, was funktioniert.
> >
> > Ich transferiere per VBA aus Excel 2003 bestimmte Daten in eine
> > Access-Datenbank. Nun möchte ich vorher gerne prüfen, ob diese Access-Datei
> > bereits geöffnet ist.
> >
> > Kann mir jemand helfen?
>
> Prüfe z.B. via den DIR-Befehl, ob im betreffenden Ordner eine gleichnamige
> ..ldb-Datei existiert.
Bjoern schrieb am 11.12.2006
> Auch Dir zuerst vielen Dank für die schnelle Antwort! Leider funktioniert
> Dein Tipp in meinem Fall nicht, da die Datei im Netz liegt, und auch andere
> darauf zugreifen. Und damit liegt die ldb-Datei auch dort, wenn ich selbst
> die zugehörige Datenbank gar nicht geöffnet habe.
>
> Entscheidend für mich ist, dass die Datei auf meinem lokalen Rechner offen
> ist.
Aha, das ist natürlich noch ein klein wenig anders....
Du hättest also in diesem Falle Access bei dir lokal laufen.
Damit läuft das Ganze auf eine Fernsteuerung von Access hinaus.
Du kannst dir die Access-Instanz per GetObject 'fassen' und per VBA-code
'nachsehen', ob die Datei geöffnet ist indem Du den Namen der ev.
geöffneten Datenbank prüfst.
'Access-Instanz übernehmen
On Error Resume Next
Set appWord = GetObject(, "Word.Application")
If Err = 429 Then
Err.Clear
MsgBox "Access ist nicht gestartet"
'und die MDB lokal demnach nicht geöffnet
Exit Sub 'zum beispiel
End If
'und hier dann mit dem Access-Code weiterfahren um den Namen der geöffneten
MDB auszulesen.
Thomas Ramel schrieb am 11.12.2006
> Du kannst dir die Access-Instanz per GetObject 'fassen' und per VBA-code
> 'nachsehen', ob die Datei geöffnet ist indem Du den Namen der ev.
> geöffneten Datenbank prüfst.
>
> 'Access-Instanz übernehmen
> On Error Resume Next
> Set appWord = GetObject(, "Word.Application")
Hier dann latürnich:
Set appAcc = GetObject(, "Access.Application")
bei einer txt-Datei bekomme ich auch immer die 0, bei einer mdb-Datei
dagegen funktioniert es bei mir, egal, ob die Datei lokal auf der
Festplatte oder auf einem Netzlaufwerk liegt.
Wie dem auch sei, so bekommst du ja nicht heraus, von welchem Anwender
die Datei geöffnet ist. Da bleibt dann GetObject, wie Thomas
geschrieben hat.
Aber es könnten ja auch 2 Access-Instanzen geöffnet sein, dann wäre
evtl die API FindWindow nötig:
Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Sub access()
res = FindWindow(vbNullString, "FenstertitelDerDatenbank")
If res > 0 Then MsgBox "bereits geöffnet"
End Sub
Gruß
stefan