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

Forumthread: Datei nicht öffnen wenn in Bearbeitung

Datei nicht öffnen wenn in Bearbeitung
22.05.2014 12:46:04
Jens
Guten Tag,
ich habe ein Makro, mit dem Arbeitsblätter von Dateien auf einen Netzwerklaufwerk ausgelsen werden. Ich möchte noch erreichen, das eine Tabelle, wenn Sie von einem anderen Nutzer in Bearbeitung, oder geöffnet ist, übersprungen wird. weil das Makro sonst immer anhält. Geht so etwas?
Vielen Dank
Jens

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei nicht öffnen wenn in Bearbeitung
22.05.2014 12:58:15
Daniel
Hi
wenn du die Dateien nur lesen willst, dann würde ich sie grundsätzlich schreibgeschützt öffnen.
Dann stört es nicht, wenn sie jemand anderes bereits geöffnet hat und du blockierst auch _ niemanden, der diese Datei bearbeiten will während du sie geöffnet hast.

Workbooks.Open "D:\DeinPfad\DeineDatei.xlsx",  ReadOnly:=True

anderenfalls kann man auch die Hinweismeldungen unterdrücken:

Application.DisplayAlerts = False
Workbooks.Open "D:\DeinPfad\DeineDatei.xlsx"
Application.DisplayAlerts = True

In diesem Fall wird die Datei immer geöffnet, sollte sie jemand anderes bereits bearbeiten jedoch nur schreibgeschützt.
wenn du jetzt wissen willst, ob die Datei "frei" ist oder "gesperrt", weil jemand anderes sie _ bearbeitet, dann fragst du einfach die ReadOnly-Eigenschaft der Datei ab:

If Workbooks("DeineDatei.xlsx").ReadOnly Then
Msgbox "Datei von anderem Benutzer gesperrt"
Else
Msgbox "Datei kann geändert und gespeichert werden"
End If
Gruß Daniel

Anzeige
AW: Datei nicht öffnen wenn in Bearbeitung
22.05.2014 13:27:51
Jens
Hallo Daniel,
herzlichen dank schon mal für die vielen Tipps. Wenn ich den Code nun einfüge,
dann bekomme ich einen Index 9 Fehler. Zudem würde ich den Code gern so einfügen, damit er falls es lesbar ist, weitermacht und wenn nicht dann gleich am ende die nächste Datei öffnet.
If Not Workbooks(Pfad_Datei).ReadOnly Then
habe da aber bestimmt einen Denkfehler.
LG Jens

Anzeige
AW: Datei nicht öffnen wenn in Bearbeitung
22.05.2014 13:38:07
Daniel
Hi
wenn du mit Workbooks(...) eine Datei referenzierst, dann ist diese ja schon geöffnet und daher gibt man nur den Dateinamen ohne Pfad an.
steht aber in meinem Codebeispiel auch schon so drin, da steht nämlich nur "Workbooks("DeineDatei.xlsx")" und nicht Workbooks("C:\DeinPfad\DeineDatei.xlsx")".
Gruß Daniel

Anzeige
AW: Datei nicht öffnen wenn in Bearbeitung
22.05.2014 14:00:44
Jens
Hallo Daniel,
danke für deinen Hinweis. Wenn ich mein Makro anschaue, dann sollte die Datei zum Zeitpunkt der Prüfung noch nicht geöffnet sein.
Wenn ich es so eingebe, dann kommt die Index Meldung!
If Not Workbooks(Pfad_Datei).ReadOnly Then
Workbooks.Open Filename:=Pfad_Datei
kannst du mir vielleicht doch noch einen Tip geben!!
LG jens

Anzeige
AW: Datei nicht öffnen wenn in Bearbeitung
22.05.2014 14:05:56
Daniel
du musst die Datei erst öffnen, um sie Workbooks(...) ansprechen zu können.
du musst sie ebenfalls erst öffnen, um feststellen zu können, ob sie schon von jemand anderem geöffnet wurde oder nicht (zumindest, wenn du nur Standard-VBA kannst und nicht in die Betriebssystemtiefen abtauchen willst).
Es ist ja kein Problem, die Datei sofort wieder zu schließen und mit der nächsten weiter zu machen, sollte sie im ReadOnly-Modus geöffnet worden sein.
Gruß Daniel

Anzeige
AW: Datei nicht öffnen wenn in Bearbeitung
22.05.2014 15:00:59
Jens
hallo Daniel,
herzlichen Dank nochmal. Ich versuche das gleich nochmal.
Jens

AW: Datei nicht öffnen wenn in Bearbeitung
22.05.2014 17:39:05
Jens
Hallo Daniel,
das Makro läuft, nochmals herzlichen Dank. Es ist sicherlich für die Profis etwas umständlich geschrieben aber ich bin "stolz wie Oskar" das es jetzt so tut. Hättest du vielleicht Zeit kurz nocheinmal auf das Gesamte Werk zu schauen, ob man da etwas optimieren könnte. Ich habe z.b. eine Datei in die ich aus 61 Dateien ein Blatt kopiere. Im Moment öffne ich in der Schleife immer beide Dateien und schließe Sie dann auch wieder. Die Eine könnte aber auch offen bleiben, das würde den Prozess schon kürzer machen.
Nochmal kurz was passieren soll. Aus einer Datei heraus in der das Marko läuft sollen 61 DAteien nacheinander geöffnet und aktualisiert werden, diese sind in der Datei wo das Makro läuft in einer Spalte untereinander. aus den Dateien soll das Datenblatt Summary komplett kopiert werden und in die Summary Datei kopiert werden. In der Summary Datei gibt es pro Datei ein Tabellenblatt wenn nicht schon vorhanden wird es erzeugt und erhält einen bestimmten Namen. Bei weiteren Durchläufen soll einfach nur aktualisiert werden.
Danach die Dateien schließen.
Vielen Dank.
Hier mal der Code:
Sub Auslesen_land()
Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Call auslesen
Application.DisplayAlerts = True
End Sub
Public Function auslesen()
Dim Pfad As String
Dim Pfad_m As String
Dim Datei As String
Dim Datei_m As String
Dim Datei_3 As String
Dim Datei_4 As String
Dim Name_1 As String
Dim Name_2 As String
Dim Name_3 As String
Dim Name_4 As String
Dim g As String
Dim a As Long
Dim i As Long
Dim bytAnzahl As Byte
Dim wSheet As Worksheet
a = Sheets("Auswahl").Cells(1, 6)
Pfad_r = Range("c17").Value
For i = 1 To a
With ThisWorkbook.Worksheets("Auswahl")
Pfad = .Range("H1").Value
Name_3 = .Range("k" & i + 2).Value
Name_4 = .Range("J" & i + 2).Value
Datei = .Range("h" & i + 2).Value
Name_2 = .Range("q" & i + 2).Value
g = Format(Name_3, "dd.mm.yyyy") & "-" & Format(Name_4, "hh:nn:ss")
End With
Pfad_Datei = Pfad & Datei
Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Workbooks.Open Filename:=Pfad_Datei
If Not Workbooks(Datei).ReadOnly Then
If WorkSheetExists("1_summary") Then
Calculate
Sheets("1_summary").Select
Cells.Select
Selection.Copy
Workbooks.Open Filename:=Pfad_r  'diese Datei könnte auch immer offen bleiben, mann mü _
sste Sie nur an dieser Stelle ansteuern
If WorkSheetExists(Name_2) Then
Worksheets(Name_2).Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Else
Worksheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Name_2
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End If
Range("A1").Select
ActiveCell.FormulaR1C1 = g
ActiveWorkbook.save
ActiveWorkbook.Close
ActiveWorkbook.save
ActiveWorkbook.Close
Else
End If
Else
End If
Next i
End Function

Public Function WorkSheetExists(ByVal strName As String) As Boolean
On Error Resume Next
WorkSheetExists = Not Worksheets(strName) Is Nothing
End Function

Anzeige
AW: Datei nicht öffnen wenn in Bearbeitung
22.05.2014 17:53:18
Daniel
naja, die übliche unnötige Selektierei ist halt noch drin:
Sheets("1_summary").Select
Cells.Select
Selection.Copy
lässt sich zu einer Zeile zusammenfassen:
Sheets("1_summary").Cells.Copy

und wird damit schneller und ohne Bildschirmaktivität ausgeführt.
Das gilt für alle Aktionen, die du in VBA mit Excelzellen, -blättern oder -mappen ausführt.
Man braucht nicht das Objekt zu selektieren, um dann die Aktion mit der Selektion auszuführen, man kann immer die Aktion auch direkt mit dem Objekt ausführen.
der Recorder zeichnet das Selektiern zwar auf, weil wir als Mausschubser so arbeiten, aber in VBA ist es nicht notwendig und sollte auch unterbleiben.
Gruß Daniel
Gruß Daniel

Anzeige
AW: Datei nicht öffnen wenn in Bearbeitung
22.05.2014 18:32:10
Jens
Hallo Daniel,
Herzlichen Dank,
könntest du vielleicht noch mal schauen wie ich die Datei Pfad_r bereits am Anfang vor der "FOR" Schleife öffne, die ganze Zeit offen lasse und nur mit den Daten befülle? Wie sorge ich dafür das die Datei während der For schleife immer wieder angesteuert wird?!
herzlichen Dank.
Jens

Anzeige
AW: Datei nicht öffnen wenn in Bearbeitung
22.05.2014 19:14:47
Daniel
Hi
da arbeitet man am besten mit Variablen, welcher man ein Objekt am Anfang zuweist und dann im Code immer diese Variable verwendet:
dim wbXyz as Workbook
set wbXyz = Workbooks.Open("C:\DeinPfad\DeineDatei.xlsm")
wbXyz.Sheets("Tabelle1").Cells(1, 1).Value = "Hallo Welt"
...
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Dateien in Excel öffnen: Problemlösungen für gesperrte Dokumente


Schritt-für-Schritt-Anleitung

  1. Datei im schreibgeschützten Modus öffnen: Wenn du eine Excel-Datei, die möglicherweise von einem anderen Benutzer geöffnet ist, nur lesen möchtest, kannst du sie im schreibgeschützten Modus öffnen. Das verhindert, dass dein Zugriff andere Benutzer stört.

    Workbooks.Open "D:\DeinPfad\DeineDatei.xlsx", ReadOnly:=True
  2. Hinweismeldungen unterdrücken: Um die Warnmeldungen beim Öffnen einer Datei zu vermeiden, kannst du die folgenden Zeilen verwenden:

    Application.DisplayAlerts = False
    Workbooks.Open "D:\DeinPfad\DeineDatei.xlsx"
    Application.DisplayAlerts = True
  3. Prüfen, ob die Datei gesperrt ist: Nach dem Öffnen der Datei kannst du den ReadOnly-Status überprüfen:

    If Workbooks("DeineDatei.xlsx").ReadOnly Then
       MsgBox "Datei von anderem Benutzer gesperrt"
    Else
       MsgBox "Datei kann geändert und gespeichert werden"
    End If

Häufige Fehler und Lösungen

  • Fehler: "Datei gesperrt obwohl nicht geöffnet": Wenn du die Fehlermeldung erhältst, kann es daran liegen, dass die Datei tatsächlich von einem anderen Benutzer geöffnet ist oder dass ein temporäres Sperrfile existiert. Versuche, die Datei später erneut zu öffnen.

  • Fehler: "Datei xlsx kann nicht geöffnet werden": Stelle sicher, dass der Dateipfad korrekt ist und dass die Datei nicht beschädigt ist. Manchmal hilft es, Excel neu zu starten.

  • Fehler: "Excel Datei gesperrt": Du kannst die Datei nicht bearbeiten, wenn sie bereits geöffnet ist. Verwende den schreibgeschützten Modus, um auf die Daten zuzugreifen.


Alternative Methoden

  • VBA zur Prüfung der Datei: Du kannst ein VBA-Skript verwenden, um zu prüfen, ob eine Datei von einem anderen Benutzer geöffnet ist, bevor du versuchst, sie zu öffnen. Hier ist ein Beispiel:

    Function IsFileOpen(fileName As String) As Boolean
       Dim fil As Integer
       On Error Resume Next
       fil = FreeFile()
       Open fileName For Binary Access Read Lock Read As #fil
       Close fil
       IsFileOpen = (Err.Number <> 0)
       On Error GoTo 0
    End Function
  • Verwenden von Workbooks.Open mit ReadOnly: Wenn du sicher bist, dass die Datei möglicherweise gesperrt ist, kannst du sie gleich im schreibgeschützten Modus öffnen.


Praktische Beispiele

Angenommen, du möchtest eine Liste von Dateien nacheinander öffnen und Daten extrahieren. Hier ist ein Beispielcode, der das zeigt:

Sub Auslesen()
    Dim Pfad As String
    Dim Datei As String
    Dim i As Long
    Dim a As Long

    a = Sheets("Auswahl").Cells(1, 6) ' Anzahl der Dateien
    Pfad = "D:\DeinPfad\"

    For i = 1 To a
        Datei = Sheets("Auswahl").Cells(i + 1, 1).Value
        If Not IsFileOpen(Pfad & Datei) Then
            Workbooks.Open Filename:=Pfad & Datei, ReadOnly:=True
            ' Hier kannst du weitere Bearbeitungen durchführen
            ActiveWorkbook.Close SaveChanges:=False
        Else
            MsgBox "Datei " & Datei & " ist gesperrt."
        End If
    Next i
End Sub

Tipps für Profis

  • Vermeide unnötige Selektionen: Du kannst direkt auf Zellen zugreifen, ohne sie vorher auszuwählen. Zum Beispiel:

    Sheets("1_summary").Cells.Copy
  • Offene Arbeitsmappen: Halte Arbeitsmappen, die häufig verwendet werden, offen, anstatt sie in jeder Iteration neu zu öffnen. Weise einer Variablen die Arbeitsmappe zu und greife dann über diese Variable darauf zu.

    Dim wbXyz As Workbook
    Set wbXyz = Workbooks.Open("C:\DeinPfad\DeineDatei.xlsm")

FAQ: Häufige Fragen

1. Warum kann ich die Excel-Datei nicht öffnen? Die Datei könnte von einem anderen Benutzer geöffnet sein, oder es gibt ein temporäres Sperrfile. Überprüfe, ob jemand anders die Datei nutzt.

2. Wie prüfe ich, ob eine Datei von einem anderen Benutzer geöffnet ist? Du kannst ein VBA-Skript verwenden, das versucht, die Datei im Lesezugriff zu öffnen. Wenn es nicht möglich ist, ist die Datei wahrscheinlich gesperrt.

3. Was bedeutet "schreibgeschützt" in Excel? Wenn eine Datei schreibgeschützt geöffnet wird, kannst du sie ansehen, aber nicht bearbeiten oder speichern. Dies ist nützlich, um Konflikte zu vermeiden, wenn mehrere Benutzer die Datei gleichzeitig verwenden.

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