Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: Aus Excel prüfen, ob eine bestimmte Access-Datenbank offen ist

561 views
Skip to first unread message

Thomas Ramel

unread,
Dec 11, 2006, 7:22:01 AM12/11/06
to
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.

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

Bjoern

unread,
Dec 11, 2006, 7:42:00 AM12/11/06
to
Moin Stefan!

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

Bjoern

unread,
Dec 11, 2006, 7:44:01 AM12/11/06
to
Moin Thomas!

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.

Thomas Ramel

unread,
Dec 11, 2006, 8:31:48 AM12/11/06
to
Grüezi Bjoern

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

unread,
Dec 11, 2006, 8:38:07 AM12/11/06
to
Grüezi Björn ich mach mal gleich die Ingrid

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")

stefan onken

unread,
Dec 11, 2006, 9:12:26 AM12/11/06
to
hallo Björn,
Bjoern schrieb:

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

0 new messages