HERBERS Excel-Forum - das Archiv
Mehrere geöffnete Dateien abfragen
Thomas

Hallo,
ich muss 4 Excel Dateien abfragen ob sie geöffnet sind. (Mitte.xlsm, Sued.xlsm, Nord.xlsm und West.xlsm) Nur wenn alle vier geschlossen sind soll das Makro "Aktualisieren" ausgeführt werden. Weiter soll über eine Message Box ausgegeben werden welche Datei(en) geöffnet ist / sind. Für eine Datei bekomme ich das hin, aber bei vier Dateien muss ich leider auch nach umfangreicher Recherche in diversen Foren aufgeben. Vielleicht kann mir ja hier jemand weiterhelfen.
Gruß,
Thomas
Hier der Code für die eine Datei.
Sub DateiOffen()
Dim sFile As String, sPath As String
sFile = "Mitte.xlsm"
sPath = ThisWorkbook.Path & "\" & sFile
If WkbOpen("Mitte.xlsm") = False Then
Call Aktualisieren
Else
MsgBox (sFile) & " ist geöffnet!"
End If
End Sub
Private Function WkbOpen(sFile As String) As Boolean
Dim wkb As Object
On Error Resume Next
Set wkb = Workbooks(sFile)
If Not wkb Is Nothing Then
WkbOpen = True
End If
On Error GoTo 0
End Function

AW: Mehrere Dateien abfragen, ob offen
Gerd

Hallo Thomas!
Sub DateienOffen2()
Dim sFile As String, sPath() As String
Dim arrFiles As Variant
Dim i As Integer
arrFiles = Array("Mitte.xlsm", "Sued.xlsm", "Nord.xlsm", "West.xlsm")
For i = 0 To UBound(arrFiles)
sFile = arrFiles(i)
sPath(i) = ThisWorkbook.Path & "\" & sFile
If WkbOpen(sFile) = True Then GoTo EXITCauseOPEN
Next
Call Aktualisieren
Exit Sub
EXITCauseOPEN:
MsgBox (sFile) & " ist geöffnet!"
End Sub

Private Function WkbOpen(sFile As String) As Boolean
Dim wkb As Object
On Error Resume Next
Set wkb = Workbooks(sFile)
If Not wkb Is Nothing Then
WkbOpen = True
End If
On Error GoTo 0
End Function
Gruß Gerd

AW: Mehrere Dateien abfragen, ob offen
Thomas

Hallo Gerd,
vielen Dank für Deine schnelle Hilfe. Habe allerdings den Code von Nepumuk verwendet.
Trotzdem besten Dank.
Viele Grüße,
Thomas

AW: Mehrere Dateien abfragen, ob offen
Werner

Hallo Gerd,
bin hier immer am mitlesen um was zu lernen. Ich hätte eine Frage zu deinem Code.
Warum benutzt du beim Pfad auch die Laufvariable i ein "sPath(i)" ginge das nicht auch ohne?
Danke und Gruß Werner

AW: Mehrere Dateien abfragen, ob offen
Gerd

Hallo Werner,
doch, es geht auch ohne. Dies habe ich nur für den Fall mit aufgenommen, dass beim aufgerufenen Makro "Akualisieren" bei vier Dateien deren Pfade benötigt werden sollten.
Gruß Gerd

AW: Danke für die Antwort. o.w.T.
Werner

AW: Mehrere geöffnete Dateien abfragen
Nepumuk

Hallo,
ich bin kein Freund von "quick & dirty".
Option Explicit

Public Sub ExamineOpenFiles()
    
    Dim avntFileNames As Variant
    Dim ialngIndex As Long
    Dim strFilename As String
    Dim objWorkbook As Workbook
    
    avntFileNames = Array("Mitte.xlsm", "Sued.xlsm", "Nord.xlsm", "West.xlsm")
    
    For ialngIndex = LBound(avntFileNames) To UBound(avntFileNames)
        
        For Each objWorkbook In Application.Workbooks
            
            If objWorkbook.Name = avntFileNames(ialngIndex) Then
                
                strFilename = strFilename & avntFileNames(ialngIndex) & vbLf
                Exit For
                
            End If
        Next
    Next
    
    If strFilename = vbNullString Then
        Call Aktualisieren
    Else
        Call MsgBox(strFilename & vbLf & "ist geöffnet.", vbExclamation, "Hinweis")
    End If
End Sub

Gruß
Nepumuk

AW: Mehrere geöffnete Dateien abfragen
Thomas

Hallo Nepumuk,
das ging ja wirklich schnell. Der Code läuft tadellos!
Vielen herzlichen Dank.
Gruß, Thomas

Code von Nepumuk auf Netzlaufwerk
Nepumuk

Hallo,
der Code von Nepumuk läuft auf einem lokalen Rechner super.
Kann man diesen jedoch so abändern, dass er auch funktioniert wenn auf dem Netzlaufwerk von einem anderen Nutzer auf die Dateien zugegriffen wird?
Alle Dateien liegen immer in demselben Ordner und an demselben Speicherort.
Viele Grüße,
Thomas

AW: Code von Nepumuk auf Netzlaufwerk
Nepumuk

Hallo,
wie meinst du das? Etwa ob ein anderer Benutzer eine der vier Dateien geöffnet hat? Wird denn in diese Dateien geschrieben, oder nur gelesen?
Gruß
Nepumuk

AW: Code von Nepumuk auf Netzlaufwerk
Nepumuk

Hallo,
genau darum geht es. Ob ein anderer Nutzer eine der Dateien göffnet hat. Die Nutzer schreiben auch in die jeweiligen Dateien "West", "Mitte", "Sued" und "Nord". Die von den Nutzern eingegebenen Daten werden dann in der Tabelle "Gesamt" zusammengefasst.
Gruß,
Thomas

AW: Code von Nepumuk auf Netzlaufwerk
Nepumuk

Hallo,
dann öffne die Dateien doch einfach schreibgeschützt, dann spielt es keine Rolle ob die auf einem anderen Rechner geöffnet ist oder nicht. Du hast sowieso keine Möglichkeit per VBA rauszubekommen auf welchem Rechner sie offen ist.
Gruß
Nepumuk

Mehrere geöffnete Dateien abfragen
Thomas

Hallo,
ich muss 4 Excel Dateien abfragen ob sie geöffnet sind. (Mitte.xlsm, Sued.xlsm, Nord.xlsm und West.xlsm) Nur wenn alle vier geschlossen sind soll das Makro "Aktualisieren" ausgeführt werden. Weiter soll über eine Message Box ausgegeben werden welche Datei(en) geöffnet ist / sind. Für eine Datei bekomme ich das hin, aber bei vier Dateien muss ich leider auch nach umfangreicher Recherche in diversen Foren aufgeben. Vielleicht kann mir ja hier jemand weiterhelfen.
Gruß,
Thomas
Hier der Code für die eine Datei.
Sub DateiOffen()
Dim sFile As String, sPath As String
sFile = "Mitte.xlsm"
sPath = ThisWorkbook.Path & "\" & sFile
If WkbOpen("Mitte.xlsm") = False Then
Call Aktualisieren
Else
MsgBox (sFile) & " ist geöffnet!"
End If
End Sub
Private Function WkbOpen(sFile As String) As Boolean
Dim wkb As Object
On Error Resume Next
Set wkb = Workbooks(sFile)
If Not wkb Is Nothing Then
WkbOpen = True
End If
On Error GoTo 0
End Function

AW: Mehrere Dateien abfragen, ob offen
Gerd

Hallo Thomas!
Sub DateienOffen2()
Dim sFile As String, sPath() As String
Dim arrFiles As Variant
Dim i As Integer
arrFiles = Array("Mitte.xlsm", "Sued.xlsm", "Nord.xlsm", "West.xlsm")
For i = 0 To UBound(arrFiles)
sFile = arrFiles(i)
sPath(i) = ThisWorkbook.Path & "\" & sFile
If WkbOpen(sFile) = True Then GoTo EXITCauseOPEN
Next
Call Aktualisieren
Exit Sub
EXITCauseOPEN:
MsgBox (sFile) & " ist geöffnet!"
End Sub

Private Function WkbOpen(sFile As String) As Boolean
Dim wkb As Object
On Error Resume Next
Set wkb = Workbooks(sFile)
If Not wkb Is Nothing Then
WkbOpen = True
End If
On Error GoTo 0
End Function
Gruß Gerd

AW: Mehrere Dateien abfragen, ob offen
Thomas

Hallo Gerd,
vielen Dank für Deine schnelle Hilfe. Habe allerdings den Code von Nepumuk verwendet.
Trotzdem besten Dank.
Viele Grüße,
Thomas

AW: Mehrere Dateien abfragen, ob offen
Werner

Hallo Gerd,
bin hier immer am mitlesen um was zu lernen. Ich hätte eine Frage zu deinem Code.
Warum benutzt du beim Pfad auch die Laufvariable i ein "sPath(i)" ginge das nicht auch ohne?
Danke und Gruß Werner

AW: Mehrere Dateien abfragen, ob offen
Gerd

Hallo Werner,
doch, es geht auch ohne. Dies habe ich nur für den Fall mit aufgenommen, dass beim aufgerufenen Makro "Akualisieren" bei vier Dateien deren Pfade benötigt werden sollten.
Gruß Gerd

AW: Danke für die Antwort. o.w.T.
Werner

AW: Mehrere geöffnete Dateien abfragen
Nepumuk

Hallo,
ich bin kein Freund von "quick & dirty".
Option Explicit

Public Sub ExamineOpenFiles()
    
    Dim avntFileNames As Variant
    Dim ialngIndex As Long
    Dim strFilename As String
    Dim objWorkbook As Workbook
    
    avntFileNames = Array("Mitte.xlsm", "Sued.xlsm", "Nord.xlsm", "West.xlsm")
    
    For ialngIndex = LBound(avntFileNames) To UBound(avntFileNames)
        
        For Each objWorkbook In Application.Workbooks
            
            If objWorkbook.Name = avntFileNames(ialngIndex) Then
                
                strFilename = strFilename & avntFileNames(ialngIndex) & vbLf
                Exit For
                
            End If
        Next
    Next
    
    If strFilename = vbNullString Then
        Call Aktualisieren
    Else
        Call MsgBox(strFilename & vbLf & "ist geöffnet.", vbExclamation, "Hinweis")
    End If
End Sub

Gruß
Nepumuk

AW: Mehrere geöffnete Dateien abfragen
Thomas

Hallo Nepumuk,
das ging ja wirklich schnell. Der Code läuft tadellos!
Vielen herzlichen Dank.
Gruß, Thomas

Code von Nepumuk auf Netzlaufwerk
Nepumuk

Hallo,
der Code von Nepumuk läuft auf einem lokalen Rechner super.
Kann man diesen jedoch so abändern, dass er auch funktioniert wenn auf dem Netzlaufwerk von einem anderen Nutzer auf die Dateien zugegriffen wird?
Alle Dateien liegen immer in demselben Ordner und an demselben Speicherort.
Viele Grüße,
Thomas

AW: Code von Nepumuk auf Netzlaufwerk
Nepumuk

Hallo,
wie meinst du das? Etwa ob ein anderer Benutzer eine der vier Dateien geöffnet hat? Wird denn in diese Dateien geschrieben, oder nur gelesen?
Gruß
Nepumuk

AW: Code von Nepumuk auf Netzlaufwerk
Nepumuk

Hallo,
genau darum geht es. Ob ein anderer Nutzer eine der Dateien göffnet hat. Die Nutzer schreiben auch in die jeweiligen Dateien "West", "Mitte", "Sued" und "Nord". Die von den Nutzern eingegebenen Daten werden dann in der Tabelle "Gesamt" zusammengefasst.
Gruß,
Thomas

AW: Code von Nepumuk auf Netzlaufwerk
Nepumuk

Hallo,
dann öffne die Dateien doch einfach schreibgeschützt, dann spielt es keine Rolle ob die auf einem anderen Rechner geöffnet ist oder nicht. Du hast sowieso keine Möglichkeit per VBA rauszubekommen auf welchem Rechner sie offen ist.
Gruß
Nepumuk

Bewerten Sie hier bitte das Excel-Portal