Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Prüfen ob Datei bereits geöffnet

Prüfen ob Datei bereits geöffnet
25.02.2016 14:08:43
Nicolai
Hallo zusammen,
ich hatte hier vor kurzem von ChrisL diesen Code bekommen, leider war der Thread nicht mehr offen, aber ich hatte nun noch eine Frage:
Hier der Link zum Archiv-Thread:
https://www.herber.de/forum/archiv/1468to1472/t1470348.htm

Sub t()
Dim WB1 As Workbook, WB2 As Workbook
Dim varDatei As Variant
Application.ScreenUpdating = False
Set WB1 = ThisWorkbook
ChDrive "T:"
ChDir "T:\~Betrieb_Waghäusel\~Kommissionierung\~GL Kommissionierung\Allgemein\ _
Parametereinstellungen\"
varDatei = Application.GetOpenFilename("Excel Datei (*.xlsm), *.xlsm", , "Datei auswählen", ,  _
False)
If varDatei  False Then
Set WB2 = Workbooks.Open(varDatei)
Else
Exit Sub
End If
End If
WB2.Worksheets(2).Range("M2:S43").Copy WB1.Worksheets(2).Range("M2")
WB2.Close SaveChanges:=False
Application.ScreenUpdating = True
End Sub
In diesem Code habe ich zwei Zeilen eingefügt die mir bereits den Pfad vorgeben:

ChDrive "T:"
ChDir "T:\~Betrieb_Waghäusel\~Kommissionierung\~GL Kommissionierung\Allgemein\ _
Parametereinstellungen\"
Ich möchte allerdings nun noch abfangen, ob die Datei die ich ausgewählt habe bereits geöffnet ist, sodass keine Fehlermeldung kommt beim ausführen.
Vielen Dank & Grüße,
Nicolai

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob Datei bereits geöffnet
25.02.2016 15:39:16
Luschi
Hallo Nicolai,
so sollte es auch bei Dir klappen:

Dim WB2 As Workbook
Dim i As Integer, nurDatei As String
varDatei = Application.GetOpenFilename("Excel Datei (*.xlsm), *.xlsm", , _
"Datei auswählen", , False)
If varDatei  False Then
'Position letztes '\' im Pfad+Dateiname ermitteln
i = InStrRev(varDatei, "\", -1, vbTextCompare)
'nur den Dateinames rausfiltern
nurDatei = Mid(varDatei, i + 1)
On Error Resume Next
'Testöffnung
Set WB2 = Workbooks(nurDatei)
On Error GoTo 0
If WB2 Is Nothing Then
Set WB2 = Workbooks.Open(varDatei)
Else
MsgBox "AM '" & nurDatei & "' ist schön geöffnet!", vbSystemModal + 48, "Hinweis..."
End If
Else
Exit Sub
End If

Anzeige
AW: Prüfen ob Datei bereits geöffnet
25.02.2016 15:48:50
Nicolai
Hallo Luschi,
vielen Dank für deine schnelle Rückmeldung.
Es hat funktioniert.
Mein Code sieht nun wie folgt aus:

Sub t()
Dim WB1 As Workbook, WB2 As Workbook
Dim varDatei As Variant
Dim i As Integer, nurDatei As String
Application.ScreenUpdating = False
Set WB1 = ThisWorkbook
ChDrive "T:"
ChDir "T:\~Betrieb_Waghäusel\~Kommissionierung\~GL Kommissionierung\Allgemein\ _
Parametereinstellungen\"
varDatei = Application.GetOpenFilename("Excel Datei (*.xlsm), *.xlsm", , "Datei auswählen", ,  _
False)
'If varDatei  False Then
'    Set WB2 = Workbooks.Open(varDatei)
'Else
'    Exit Sub
'End If
If varDatei  False Then
'Position letztes '\' im Pfad+Dateiname ermitteln
i = InStrRev(varDatei, "\", -1, vbTextCompare)
'nur den Dateinames rausfiltern
nurDatei = Mid(varDatei, i + 1)
On Error Resume Next
'Testöffnung
Set WB2 = Workbooks(nurDatei)
On Error GoTo 0
If WB2 Is Nothing Then
Set WB2 = Workbooks.Open(varDatei)
Else
MsgBox "AM '" & nurDatei & "' ist schön geöffnet!", vbSystemModal + 48, "Hinweis..."
End If
Else
Exit Sub
End If
WB2.Worksheets(2).Range("M2:S43").Copy WB1.Worksheets(2).Range("M2")
WB2.Close SaveChanges:=False
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Prüfen ob Datei bereits geöffnet
25.02.2016 16:08:22
Luschi
Hallo Nicolai,
Objektvariablen sollte man vor Beenden der Prozedur wieder ins Nirvana Schicken; also:
Set WB1 = Nothing
Set WB2 = Nothing
Application.ScreenUpdating = True
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Prüfen, ob eine Excel-Datei bereits geöffnet ist


Schritt-für-Schritt-Anleitung

Um zu überprüfen, ob eine Excel-Datei bereits geöffnet ist, kannst du den folgenden VBA-Code verwenden. Dieser Code fragt den Benutzer nach einer Datei und prüft, ob die Datei bereits geöffnet ist, bevor sie geladen wird.

Sub t()
    Dim WB1 As Workbook, WB2 As Workbook
    Dim varDatei As Variant
    Dim i As Integer, nurDatei As String
    Application.ScreenUpdating = False
    Set WB1 = ThisWorkbook
    ChDrive "T:"
    ChDir "T:\~Betrieb_Waghäusel\~Kommissionierung\~GL Kommissionierung\Allgemein\Parametereinstellungen\"

    varDatei = Application.GetOpenFilename("Excel Datei (*.xlsm), *.xlsm", , "Datei auswählen", , False)

    If varDatei <> False Then
        ' Position letztes '\' im Pfad+Dateiname ermitteln
        i = InStrRev(varDatei, "\", -1, vbTextCompare)
        ' nur den Dateinamen rausfiltern
        nurDatei = Mid(varDatei, i + 1)

        On Error Resume Next
        ' Testöffnung
        Set WB2 = Workbooks(nurDatei)
        On Error GoTo 0

        If WB2 Is Nothing Then
            Set WB2 = Workbooks.Open(varDatei)
        Else
            MsgBox "Die Datei '" & nurDatei & "' ist bereits geöffnet!", vbSystemModal + 48, "Hinweis..."
        End If
    Else
        Exit Sub
    End If

    ' Arbeitsbereich kopieren
    WB2.Worksheets(2).Range("M2:S43").Copy WB1.Worksheets(2).Range("M2")
    WB2.Close SaveChanges:=False
    Application.ScreenUpdating = True

    ' Objektvariablen zurücksetzen
    Set WB1 = Nothing
    Set WB2 = Nothing
End Sub

Häufige Fehler und Lösungen

Fehler: "Die Datei ist bereits geöffnet!"
Wenn du diese Meldung erhältst, ist die Datei tatsächlich geöffnet. Stelle sicher, dass du die richtige Datei gewählt hast.

Fehler: "Anwendungsfehler"
Dieser Fehler tritt auf, wenn der Pfad zur Datei nicht korrekt ist. Überprüfe den angegebenen Pfad und die Verzeichnisstruktur.


Alternative Methoden

Eine alternative Methode, um zu prüfen, ob eine Excel-Datei geöffnet ist, besteht darin, eine benutzerdefinierte Funktion zu erstellen, die den Status der Datei überprüft. Hier ist ein Beispiel:

Function IsWorkbookOpen(ByVal wbName As String) As Boolean
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks(wbName)
    On Error GoTo 0
    IsWorkbookOpen = Not wb Is Nothing
End Function

Du kannst diese Funktion in deinem Hauptcode verwenden, um die Datei zu überprüfen.


Praktische Beispiele

Angenommen, du möchtest eine Datei namens "Daten.xlsx" überprüfen. Du kannst den Code wie folgt anpassen:

If IsWorkbookOpen("Daten.xlsx") Then
    MsgBox "Die Datei ist bereits geöffnet."
Else
    ' Öffne die Datei
End If

Dies ermöglicht dir, den Status der Datei schnell zu überprüfen, bevor du versuchst, sie zu öffnen.


Tipps für Profis

  • Vermeide die Verwendung von On Error Resume Next, es sei denn, es ist unbedingt notwendig. Dies kann dazu führen, dass du wichtige Fehler übersiehst.
  • Verwende Application.ScreenUpdating = False, um die Performance zu verbessern, wenn du große Datenmengen verarbeitest.
  • Denke daran, die Objektvariablen am Ende deiner Prozeduren zurückzusetzen, um den Speicher zu entlasten.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehrere Dateien zu überprüfen?
Du kannst eine Schleife verwenden, um durch eine Liste von Dateinamen zu iterieren und die Funktion IsWorkbookOpen für jede Datei aufzurufen.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der Code sollte in allen modernen Excel-Versionen funktionieren, die VBA unterstützen, einschließlich Excel 2010 und neuer. Achte darauf, dass du die richtige Dateiendung verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige