Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Datenabruf - Kopie einer Datei zuerst öffnen

Forumthread: Datenabruf - Kopie einer Datei zuerst öffnen

Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 16:11:51
ChrisWe
Hallo liebe Excel-perten,
ich habe ein Makro geschrieben, um Daten aus einer anderen Excel Datei in meine Tabelle einzufügen. Diese andere Datei kann allerdings mehrfach vorhanden sein mit der von Windows automatisch generierten Benennung:Datei.xls, Datei (1).xls, Datei (2).xls, ... usw.
Ich möchte gerne, dass mein Makro die Daten der letzten vorhandenen Datei nimmt. In meinem Code hab ich es probiert mit:
Dateiname = "Datei" & " (2)" & ".xls"

aber scheinbar funktioniert das " (2)" nicht, da er die Datei nicht findet. Mein Code ist so gestrickt, dass er die "Datei (3).xls" zuerst sucht und sich runter arbeitet, bis er bei "Datei.xls" angekommen ist. Die Originaldatei "Datei.xls" findet er am Ende. Könnt ihr mir da helfen?

Schöne Grüße
Chris


Anzeige

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 16:16:59
Onur
Dumme Frage: Du hast Excel365 und speicherst Dateien trotzdem als XLS ab ???
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 16:18:25
ChrisWe
Die Datei ist ein Report aus einem anderen Programm raus und wird als .xls automatisch gespeichert.
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 16:23:38
Onur
Du solltest erst mal rausfinden lassen, ob eine Datei mit diesem Namen überhaupt existiert - das Netz ist voll mit Lösungen zu diesem Thema - und dann erst sie öffnen lassen.
Anzeige
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 16:26:00
Onur
Google nach "vba ob eine Datei mit diesem Namen existiert".
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 16:31:51
ChrisWe
Das ist nicht ganz mein Problem,
Wenn die Dateien:
Datei.xls
Datei (1).xls
Datei (2).xls
vorhanden sind,
möchte ich, dass er die "Datei (2).xls" öffnet.
Wenn ich die Datei allerdings in VBA
Dateiname = "Datei" & " (2)" & ".xls"

benenne, findet er diese Datei nicht, obwohl diese so vorhanden ist.
Genauso wenn ich den exakten Dateinamen kopiere und in vba direkt reinschreibe, findet er sie nicht.
Anzeige
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 16:33:37
Onur
Und in welchem ORDNER lässt du diese Dateien suchen ?
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 16:34:18
ChrisWe
Pfad = "C:\Users\" & Environ("UserName") & "\Downloads\"
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 16:37:29
Onur
Woher weisst du das? Sag nicht: " weil es im Code steht", denn den Code hast du nicht gepostet - nur eine einzige Zeile davon.
Anzeige
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 16:39:33
Onur
Sollte heissen: Poste mal den ganzen Code von der Routine mit dem Öffnen (die ganze SUB).
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 16:35:37
Onur
Auch im Explorer kannst du nicht einfach oben einen Dateinamen eintippen und erwarten, dass er sie findet, wenn du dich nicht im richtigen Ordner befindest.
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 16:42:38
ChrisWe
Nungut, ich sehe schon es ist etwas umständlicher als gedacht.
Das andere Programm erstellt eine Export Datei, die im persönlichen Download Ordner landet. Da nicht nur ich die Tabelle verwende, ist es so geschrieben, dass der Persönliche Download Ordner angezogen wird.
Hier mal der ganze Code:
Sub Import()



Dim Pfad As String
Dim Datei As String
Dim Dateipfad As String
Dim d As String
Dim m As String
Dim y As String
Dim tag As String
Dim shift As String

tag = Worksheets("Tabelle1").Range("J3").Value
shift = Worksheets("Tabelle1").Range("A4").Value
ActiveSheet.Range("P5").Value = ""
Worksheets("Tabelle3").Range("A7:J61").ClearContents


y = CStr(Year(Now))
m = Right("0" + CStr(Month(Now)), 2)
d = Right("0" + CStr(Day(Now)), 2)

Pfad = "C:\Users\" & Environ("UserName") & "\Downloads\"

Datei = "export_" & d & "-" & m & "-" & y & " (3)" & ".xls"
Dateipfad = Pfad & Datei

FehlerA:
Datei = "export_" & d & "-" & m & "-" & y & ".xls"
Dateipfad = Pfad & Datei
GoTo contA

FehlerB:
Datei = "export_" & d & "-" & m & "-" & y & " (1)" & ".xls"
Dateipfad = Pfad & Datei
GoTo contB

FehlerC:
Datei = "export_" & d & "-" & m & "-" & y & " (2)" & ".xls"
Dateipfad = Pfad & Datei
GoTo contC

Fehler:
Worksheets("Tabelle1").Range("P5").Value = "Keine Datei gefunden"
GoTo Ende

contA:
On Error GoTo Fehler
Workbooks.Open Filename:=Dateipfad
GoTo cont

contB:
On Error GoTo FehlerA
Workbooks.Open Filename:=Dateipfad
GoTo cont

contC:
On Error GoTo FehlerB
Workbooks.Open Filename:=Dateipfad
GoTo cont

On Error GoTo FehlerC

Workbooks.Open Filename:=Dateipfad

cont:

Calculate

If tag > 0.53 And shift = "Früh - Mittel" Then
m = Right("0" + CStr(Month(Now + 1)), 2)
d = Right("0" + CStr(Day(Now + 1)), 2)
Else
m = Right("0" + CStr(Month(Now)), 2)
d = Right("0" + CStr(Day(Now)), 2)
End If

Range(Cells(6, 1), Cells(60, 10)).Select
Selection.Copy
ThisWorkbook.Sheets("Tabelle3").Activate
ActiveSheet.Range("X3").Value = d
ActiveSheet.Range("Y3").Value = m
ActiveSheet.Range("Z3").Value = y
Sheets("Tabelle3").Cells(7, 1).Select
ActiveSheet.Paste
' Rohdatendatei schließen
Application.CutCopyMode = False
Workbooks(Datei).Close (False)


GoTo Ende

Ende:

Calculate

Dim zähler As Single
Dim ZelleA As String
Dim ZelleB As String
Dim ZelleC As String
Dim ZelleD As String
Dim ZelleL As String
Dim ZelleN As String
Dim ZelleO As String
Dim ZelleP As String
Dim ZelleR As String
Dim ZelleS As String
Dim AZ As String
Dim DZ As String
Dim Abfrage As String


zähler = 7

Do Until zähler = 51
ZelleA = "A" & zähler
ZelleB = "B" & zähler
ZelleC = "C" & zähler
ZelleD = "D" & zähler
ZelleL = "L" & zähler
ZelleN = "N" & zähler
ZelleO = "O" & zähler
ZelleP = "P" & zähler
ZelleR = "R" & zähler
ZelleS = "S" & zähler
Abfrage = ActiveSheet.Range(ZelleA).Value

If Abfrage = "" Then
ElseIf ActiveSheet.Range(ZelleL).Value = 0 Then
AZ = ActiveSheet.Range(ZelleN).Value
DZ = ActiveSheet.Range(ZelleO).Value
Worksheets("Tabelle1").Range(ZelleC).Value = AZ & DZ
Worksheets("Tabelle1").Range(ZelleA).Value = ActiveSheet.Range(ZelleA).Value
Worksheets("Tabelle1").Range(ZelleB).Value = ActiveSheet.Range(ZelleB).Value

Else
Worksheets("Tabelle1").Range(ZelleC).Value = "NS"
Worksheets("Tabelle1").Range(ZelleA).Value = ActiveSheet.Range(ZelleA).Value
Worksheets("Tabelle1").Range(ZelleB).Value = ActiveSheet.Range(ZelleB).Value
End If

If Abfrage = "" Then
ElseIf ActiveSheet.Range(ZelleP).Value = 0 Then
AZ = ActiveSheet.Range(ZelleR).Value
DZ = ActiveSheet.Range(ZelleS).Value
Worksheets("Tabelle1").Range(ZelleD).Value = AZ & DZ
Else
Worksheets("Tabelle1").Range(ZelleD).Value = "NS"
End If

zähler = zähler + 1

Loop




Worksheets("Tabelle3").Range("A7:J61").ClearContents
ThisWorkbook.Sheets("Tabelle1").Activate
End Sub
Anzeige
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 17:07:20
Onur
Windows speichert die Kopie NICHT als
export_14-01-2025 (3).xls
ab, sondern als
export_14-01-2025 - Kopie (3).xls
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 17:41:19
Onur
SO einfach kann es sein:

Sub Import()

Dim Pfad As String
Dim Datei As String
Dim Dateipfad As String
Dim d As String
Dim m As String
Dim y As String
Dim tag As String
Dim shift As String
Dim i, istr
tag = Worksheets("Tabelle1").Range("J3").Value
shift = Worksheets("Tabelle1").Range("A4").Value
ActiveSheet.Range("P5").Value = ""
Worksheets("Tabelle3").Range("A7:J61").ClearContents
y = CStr(Year(Now))
m = Right("0" + CStr(Month(Now)), 2)
d = Right("0" + CStr(Day(Now)), 2)
Pfad = "C:\Users\" & Environ("UserName") & "\Downloads\"
For i = 5 To 0 Step -1
istr = "": If i > 0 Then istr = " (" & i & ")"
Datei = "export_" & d & "-" & m & "-" & y & istr & ".xls"
On Error Resume Next
Workbooks.Open Filename:=Dateipfad & Datei
If ActiveWorkbook.Name = Datei Then Exit For
Next i
On Error GoTo 0
cont:
'usw
'usw
End Sub
Anzeige
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 17:50:17
ChrisWe
Workbooks.Open Filename:=Pfad & Datei

musste ich noch ändern. Dann hats funktioniert.
Danke!
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 17:51:47
Onur
Hast du den Code verstanden oder brauchst du eine Erklärung?
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 17:55:28
ChrisWe
"istr" war mir nicht bekannt. Sonst hab ich die Logic dahinter verstanden,
Danke!
Anzeige
Gerne !
14.01.2025 17:57:16
Onur
Wie man die Variable nennt, ist egal. Ich hätte sie ja auch "Klaus" nennen können.
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 18:05:20
Onur
Füge das bitte vor
cont:

hinzu, damit kein Fehler kommt, wenn gar keine Datei gefunden wurde:
If ActiveWorkbook.Name > Datei Then MsgBox "Nix gefunden!": Exit Sub
Anzeige
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 17:16:05
ChrisWe
Wie muss ich das dann einfügen?
Datei = "export_" & d & "-" & m & "-" & y & " - Kopie (3)" & ".xls"

als auch
Datei = "export_" & d & "-" & m & "-" & y & " - Copy (3)" & ".xls"

funktionieren nicht
Anzeige
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 17:26:54
Onur
Schau erst mal nach, wie die Dateien wirklich heissen. Wenn man nämlich eine Datei herunterlädt, erhält der Name keinen "Kopie"-Zusatz, nur wenn man das manuell mehrmals einfügt.
Aber ich glaube, der Hauptfehler ist die recht wirre Fehlerbehandlung. Dein Code fängt mit Originaldatei (export_14-01-2025.xls) an
FehlerA - ContA - Fehler (wg on Error) - Ende - Feierabend.
Anzeige
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 17:41:34
ChrisWe
Die Dateien heißen:
export_14-01-2025 (1).xls
export_14-01-2025 (2).xls

Die Datei "export_14-01-2025.xls" hab ich zum testen entfernt, sonst würde er diese hinzufügen.
Das die Fehlerbehandlung nicht einfach ist, stimme ich dir zu. Vielleicht hab ich da einen Denkfehler drin:



y = CStr(Year(Now))
m = Right("0" + CStr(Month(Now)), 2)
d = Right("0" + CStr(Day(Now)), 2)

Pfad = "C:\Users\" & Environ("UserName") & "\Downloads\"

Datei = "export_" & d & "-" & m & "-" & y & " (3)" & ".xls"
Dateipfad = Pfad & Datei

FehlerA:
Datei = "export_" & d & "-" & m & "-" & y & ".xls"
Dateipfad = Pfad & Datei
GoTo contA

FehlerB:
Datei = "export_" & d & "-" & m & "-" & y & " (1)" & ".xls"
Dateipfad = Pfad & Datei
GoTo contB


FehlerC:
Datei = "export_" & d & "-" & m & "-" & y & " (2)" & ".xls"
Dateipfad = Pfad & Datei
GoTo contC

Fehler:
Worksheets("Tabelle1").Range("P5").Value = "Keine Datei gefunden"
GoTo Ende

contA:
On Error GoTo Fehler
Workbooks.Open Filename:=Dateipfad
GoTo cont

contB:
On Error GoTo FehlerA
Workbooks.Open Filename:=Dateipfad
GoTo cont

contC:
On Error GoTo FehlerB
Workbooks.Open Filename:=Dateipfad
GoTo cont

On Error GoTo FehlerC
Workbooks.Open Filename:=Dateipfad

cont:


oben (noch vor dem "FehlerA:" bestimme ich aber, dass er die Datei "export_14-01-2025 (3).xls" als erstes suchen soll, wenn er einen Fehler hat, dann die ... (2), ... usw und zu aller Letzt die Datei "export_14-01-2025.xls"
Anzeige
AW: Datenabruf - Kopie einer Datei zuerst öffnen
14.01.2025 17:49:15
Onur
Ist eigentlich einfach - wenn man es kann. :)
Teste mal meine Codeänderung.
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18