Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1360to1364
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

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

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

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

102 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige