Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA - Prüfen ob Datei geöffnet ist

VBA - Prüfen ob Datei geöffnet ist
09.11.2022 10:30:00
Manu
Hallo,
ich habe folgendes Problem und komme nicht ganz auf die Lösung:
Ich möchte per VBA prüfen ob eine Datei bereits geöffnet ist -
1. wenn von einem anderen User geöffnet (also schreibgeschützt), dann Fehlermeldung (MsgBox)
2. wenn diese von mir geöffnet ist - dann Daten in diese Datei kopieren
3. wenn die Datei noch nicht geöffnet ist diese öffnen.
Irgendwie bekomme ich es nicht hin alle drei Fälle abzudecken.
Wenn die Datei von einem anderen User geöffnet ist, dann eine Fehlermeldung zu bekommen bzw. falls nicht von einem anderen User geöffnet öffnet es mir die Datei - das funktioniert mit folgendem Code:

Dim cb As Workbook
Set cb = Workbooks.Open(NeueDatei)
If cb.ReadOnly = True Then
MsgBox ("Datei ist bereits von anderem Benutzer geöffnet - bitte versuchen Sie die Aktualisierung später nochmal!")
cb.Close False
Else
....
Aber wie bekomme ich jetzt noch abgefragt ob ich die Datei schon geöffnet hab?
Danke
Viele Grüße Manu

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Prüfen ob Datei geöffnet ist
09.11.2022 10:47:04
Marc

Dim PDF_Bool As Boolean
PDF_Bool = TestOpenPDF("dein Pfad \" & dateinameMitEndung)
Und dazu die Funktion: TestOpenPDF

Function TestOpenPDF(DateiName As String) As Boolean
ThisWorkbook.Activate
Dim DateiNr As Long
Dim fehler As Long
On Error Resume Next
DateiNr = FreeFile()
Open DateiName For Input Lock Read As #DateiNr
Close DateiNr
FehlerNr = Err
On Error GoTo 0
Select Case FehlerNr
Case 0
TestOpenPDF = False
Case 53
'MsgBox "PDF wird erzeugt", vbOKOnly
TestOpenPDF = False
Case 70
TestOpenPDF = True
Case Else
'Error FehlerNr
'MsgBox "Fehler: " & FehlerNr, vbOKOnly
TestOpenPDF = False
End Select
End Function

Anzeige
AW: VBA - Prüfen ob Datei geöffnet ist
09.11.2022 11:52:04
Manu
Danke für deine schnelle Antwort. Ich hab die Lösung jetzt von Daniel genommen, da ich damit besser zurecht kam.
Gruß Manu
AW: VBA - Prüfen ob Datei geöffnet ist
09.11.2022 10:57:00
Daniel
Hi
Nun, als erstes prüft man, ob man selber die Datei schon geöffnet hat.
Wenn nicht, öffnet man sie.
Wenn man dann sicher ist, dass die Datei geöffnet ist, prüft man den Schreibschutz.

Dim wb AS Workbook
For each wb in Application.Workbooks
If wb.Name = "Dateiname ohne Pfad" then Exit for
Next
If wb is Nothing then set wb = Workbooks.Open("Dateiname mit Pfad")
If wb.readonly = true then
Code für schreibgeschützt
Else
Code für nicht schreibgeschützt.
End if
Gruß Daniel
Anzeige
AW: VBA - Prüfen ob Datei geöffnet ist
09.11.2022 11:50:22
Manu
Hallo Daniel.
es hat funktioniert :)
Herzlichen Dank !!
Gruß Manu
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA zur Überprüfung, ob eine Datei geöffnet ist


Schritt-für-Schritt-Anleitung

Um mit VBA zu überprüfen, ob eine Datei bereits geöffnet ist, kannst du folgende Schritte befolgen:

  1. Prüfen, ob die Datei bereits geöffnet ist: Du kannst eine Schleife verwenden, um alle geöffneten Arbeitsmappen zu durchsuchen.
  2. Öffnen der Datei, falls nicht geöffnet: Wenn die Datei nicht geöffnet ist, kannst du sie mit Workbooks.Open öffnen.
  3. Überprüfen des Schreibschutzes: Falls die Datei geöffnet ist, überprüfe, ob sie schreibgeschützt ist.

Hier ist ein Beispielcode, der diese Schritte umsetzt:

Dim wb As Workbook
Dim DateiName As String
DateiName = "DeinDateiname.xlsx"

' Prüfen, ob die Datei bereits geöffnet ist
For Each wb In Application.Workbooks
    If wb.Name = DateiName Then
        MsgBox "Die Datei ist bereits geöffnet."
        Exit Sub
    End If
Next

' Datei öffnen, wenn sie nicht geöffnet ist
Set wb = Workbooks.Open(DateiName)

' Überprüfen, ob die Datei schreibgeschützt ist
If wb.ReadOnly Then
    MsgBox "Die Datei ist schreibgeschützt."
Else
    MsgBox "Die Datei wurde erfolgreich geöffnet."
End If

Häufige Fehler und Lösungen

  • Datei nicht gefunden: Stelle sicher, dass der Dateipfad korrekt ist. Verwende Dir-Funktion, um zu prüfen, ob die Datei vorhanden ist.
  • Typfehler: Achte darauf, dass die Variablen korrekt deklariert sind.
  • Zugriffsverletzungen: Überprüfe die Berechtigungen der Datei und stelle sicher, dass sie nicht von einem anderen Programm verwendet wird.

Alternative Methoden

Eine andere Methode, um zu prüfen, ob eine Datei geöffnet ist, ist die Verwendung einer Funktion, die On Error-Handling nutzt:

Function IsFileOpen(DateiName As String) As Boolean
    Dim DateiNr As Long
    On Error Resume Next
    DateiNr = FreeFile()
    Open DateiName For Input Lock Read As #DateiNr
    Close DateiNr
    IsFileOpen = (Err.Number <> 0)
    On Error GoTo 0
End Function

Du kannst diese Funktion in deinen Hauptcode integrieren, um die Überprüfung zu vereinfachen.


Praktische Beispiele

  1. Prüfen, ob eine PDF-Datei geöffnet ist:
If IsFileOpen("C:\Pfad\zu\deiner\Datei.pdf") Then
    MsgBox "Die PDF-Datei ist geöffnet."
Else
    MsgBox "Die PDF-Datei kann geöffnet werden."
End If
  1. Überprüfung des letzten Änderungsdatums ohne VBA: Wenn du das Datum der letzten Änderung einer Datei ohne VBA überprüfen möchtest, kannst du dies über die Eigenschaften der Datei im Windows Explorer tun.

Tipps für Profis

  • Verwendung von Application.DisplayAlerts: Deaktiviere Warnmeldungen während des Öffnens von Dateien, um den Prozess zu beschleunigen.
  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung, um Probleme während der Ausführung deines VBA-Codes zu identifizieren.
  • Optimierung der Leistung: Schließe ungenutzte Arbeitsmappen, um die Geschwindigkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich in Excel VBA prüfen, ob eine Datei von einem anderen Benutzer geöffnet ist?
Du kannst den obenstehenden Code verwenden und die ReadOnly-Eigenschaft der Arbeitsmappe überprüfen.

2. Was kann ich tun, wenn ich eine Fehlermeldung beim Öffnen der Datei erhalte?
Überprüfe den Dateipfad und stelle sicher, dass die Datei nicht von einem anderen Programm verwendet wird. Verwende die IsFileOpen-Funktion zur Überprüfung.

3. Ist es möglich, das letzte Änderungsdatum einer Datei ohne VBA zu prüfen?
Ja, du kannst das letzte Änderungsdatum über die Dateieigenschaften im Windows Explorer überprüfen.

4. Wie kann ich sicherstellen, dass mein VBA-Code effizient läuft?
Optimiere deinen Code, indem du unnötige Schleifen vermeidest und nur die benötigten Arbeitsmappen lädst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige