Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1948to1952
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

Auslesen der geöffneten Datei

Auslesen der geöffneten Datei
06.10.2023 16:30:22
Ron
Hallo,
ich bräuchte mal eure Hilfe.
Mein Code soll eine Datei öffnen, auslesen und wieder schließen. Das funktioniert erstmal ganz gut.
Wenn aber die Datei schon geöffnet ist, funktioniert das nicht.
Kann mir jemand helfen den Fehler zu finden?
Danke

Private Sub Daten_holen()


Dim Jahr As String
Dim i As Integer
Dim found As Boolean
Dim noFilesFound As Boolean
Dim wb As Workbook
Dim ws As Worksheet
Dim Ausgabe As String
Dim Eingabe As String
Dim Zeichen As String
Dim filePath As Variant
Dim isOpen As Boolean

' Deaktiviere ScreenUpdating und PopUps (Bildschirmflackern)
Application.ScreenUpdating = False
Application.DisplayAlerts = False

' Umwandlung der Nummer auf lesbares Format
Eingabe = Tabelle1.Range("B12").value ' entspricht der Zelle mit der Nummer
Ausgabe = "" ' soll erstmal leer sein

' hier wird die Nummer dem Format des Nummer-Ordners im Explorer angepasst
' alle nicht nummerischen Zeichen (auch Leerzeichen) werden entfernt
' durchlaufe jeden Buchstaben in der Eingabe
For i = 1 To Len(Eingabe)
Zeichen = Mid(Eingabe, i, 1)
' überprüfe, ob das Zeichen eine Ziffer ist
If IsNumeric(Zeichen) Then
' füge die Ziffer zur Ausgabe hinzu
Ausgabe = Ausgabe & Zeichen
End If
Next i

' Ausgabezelle
Tabelle1.Range("B14").value = Ausgabe

' Öffnen des Dialogfensters zum Auswählen der Dateien
With Application.FileDialog(msoFileDialogOpen)

.InitialFileName = "D:dokumenteOrdner" & Ausgabe & "dokumente"
.Filters.Clear
.Filters.Add "Excel Files", "*.xlsx; *.xlsm; *.xls"

' Mehrfachauswahl wurde eingestellt
.AllowMultiSelect = True

If .Show = True Then

For Each filePath In .SelectedItems

' Überprüfen, ob die ausgewählte Datei bereits geöffnet ist
isOpen = False
For Each wb In Workbooks
If wb.FullName = filePath Then
Set ws = wb.Sheets(1)
isOpen = True
Exit For
End If
Next wb

If Not isOpen Then
' Wenn die Datei nicht bereits geöffnet ist, versuchen Sie zu öffnen
Set wb = Workbooks.Open(filePath, UpdateLinks:=False, ReadOnly:=True)
Set ws = wb.Sheets(1)
End If

' Prüfen, ob es sich bei der geöffneten Datei um die richtige Datei handelt
If ws.Range("A2").value = "Berechnung der Werte" Then

' Prüfen, ob in den Labels vierstellige Jahre stehen
For i = 1 To 5
Jahr = Me.Controls("Label" & i).Caption
If Len(Jahr) > 4 Or Not IsNumeric(Jahr) Then
MsgBox "Fehler: Das Jahr in Label " & i & " ist nicht vierstellig oder keine Zahl."
wb.Close SaveChanges:=False
Exit Sub
End If
Next i

' Function: Daten auslesen und importieren
Importiere_Datei ws

' Schließe die Arbeitsmappe ohne speichern
wb.Close SaveChanges:=False

Else

' sollte die falsche Excel-Datei ausgewählt worden sein, kommt hier die Info
MsgBox "Diese oder eine geöffnete Excel-Datei entspricht nicht den Vorgaben"
wb.Close SaveChanges:=False

End If

Next filePath

Else
Exit Sub

End If

End With

' Aktiviere ScreenUpdating und PopUps (Bildschirmflackern)
Application.ScreenUpdating = true
Application.DisplayAlerts = true

End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Auslesen der geöffneten Datei
06.10.2023 16:58:31
daniel
HI
prinzipiell ist die Prüfung, ob du die Datei schon geöffnet hast, doch drin und der Code sieht auch gut aus.

du solltest nur mal prüfen, ob wb.Fullname und FilePath die richtigen Vergleichswerte sind und den selben Inhalt haben, aber auch wenn würde ich hier nur den Dateinamen ohne Pfad als Vergleichswert nehmen.
Zum einen kann es sein, das die Pfade tatsächlich unterschiedlich sind (z.B. bei gemappten Laufwerken, könnte im einen der Laufwerksbuchstabe verwendet werden und im andern der vollständige Internetpfad), zum anderen ist für das Öffnen der Datei nur der Dateiname relevant, dh wenn der Dateiname gleich mit einer geöffneten Datei ist, kannst du diese Datei nicht öffnen, auch wenn es eine andere Datei aus einem anderen Verzeichnis ist, denn geöffnet auf deinem Rechner wird nur der Dateiname ohne Pfad verwendet.

Gruß Daniel
Anzeige
AW: Auslesen der geöffneten Datei
06.10.2023 19:01:29
Ron
Hallo Daniel,
danke für den Hinweis. Ich habe den Code daraufhin etwas geändert und jetzt geht alles.
Nochmals Danke!

            

....
For Each filePath In .SelectedItems

' Überprüfen, ob die ausgewählte Datei bereits geöffnet ist
isOpen = False
Set wb = Nothing

On Error Resume Next
Set wb = GetObject(, "Excel.Application").Workbooks(Dir(filePath))
On Error GoTo 0

If Not wb Is Nothing Then
Set ws = wb.Sheets(1)
isOpen = True
Else
' wenn die Datei nicht bereits geöffnet ist, versuche sie zu öffnen
Set wb = Workbooks.Open(filePath, UpdateLinks:=False, ReadOnly:=True)
Set ws = wb.Sheets(1)
End If
....
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige