Herbers Excel-Forum - das Archiv

Datei öffnen mit variablen im Namen


Betrifft: Datei öffnen mit variablen im Namen
von: Marc

Geschrieben am: 21.09.2019 19:16:42
Hallo ,
brauche nochmal eure Hilfe habe zwar jetzt schon zwei Stunden im Netz gesucht doch nichts passendes gefunden.ZU meinem Problem:
Ich kriege jeden morgen in einen Ordner eine Datei geschickt die ich per Makro öffnen mir Daten rauskopiere und anschließend automatisch löschen lasse .
Bis vor kurzem hieß die Datei immer gleich und so funktionierte mein Makro auch noch .
Doch seid kurzem heißt die Datei nicht mehr kumuliert.xlx sondern mal kumuliert_020181019083659562_331.xlx oder kumuliert_020181019083659562_01.xlx.
Besteht irgendwie die Möglichkeit die Dateien weiterhin automatisch zu öffnen und nachher zu löschen ?
Ich habe zwar im netz ein paar ansetze gesehen wo es funktioniert allerdings immer mit wechselndem Datum im Dateinamen .
Wie gesagt der Pfad ist immer gleich:
C:\Users\OliS\Desktop\Daten\Ausschuss\kumuliert.xlsx
Und kumuliert kommt auch immer vor .
Würde mich sehr über eure Hilfe freuen .
Mit meinen wenigen VBA Kenntnissen oder per Rekorder komme ich echt nicht weiter .

Betrifft: AW: Datei öffnen mit variablen im Namen
von: 1714229.html

Geschrieben am: 21.09.2019 20:30:46
Hi Marc,
schade, dass du deinen Code nicht zeigst. Am besten wäre eine Bsp-Datei mit Code + Bsp-Daten.
Wenn dein Öffnen-Befehl bis jetzt so aussieht:
Workbooks.Open("C:\Users\OliS\Desktop\Daten\Ausschuss\kumuliert.xlsx")

dann versuch es mal so:

Dim lstrDatei As String
lstrDatei = Dir("C:\Users\OliS\Desktop\Daten\Ausschuss\*kumuliert*.xlsx")
If lstrDatei <> "" Then
Workbooks.Open("C:\Users\OliS\Desktop\Daten\Ausschuss\" & lstrDatei)
Else
MsgBox "Datei nicht vorhanden"
End If


Hilfts?
Wenn nicht, bitte Bsp-Datei mit Code per Upload zeigen.
Ciao
Thorsten

Betrifft: AW: Datei öffnen mit variablen im Namen
von: 1714231.html
Geschrieben am: 21.09.2019 20:51:46
Aber bitte nicht lachen , so fit bin ich nicht .
Ich habe jetzt noch zwei Probleme drin die ich jeweils mit 4 mal X davor und dahinter gekennzeichnet habe . Wäre schön wenn auch hier mir einer helfen könnte.
Danke Danke

Betrifft: AW: Datei öffnen mit variablen im Namen
von: 1714232.html

Geschrieben am: 21.09.2019 20:54:26
Zwei Fehler habe ich noch drin die sind jeweils mit x Gekennzeichnet
Sub ASBerichtLaden()
'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False
'Datei kumuliert öffnen
Dim lstrDatei As String
lstrDatei = Dir("C:\Users\OliS\Desktop\Daten\Ausschuss\*kumuliert*.xlsx")
If lstrDatei <> "" Then
Workbooks.Open ("C:\Users\OliS\Desktop\Daten\Ausschuss\" & lstrDatei)
Else
MsgBox "Datei nicht vorhanden"
End If
'Tabellenblatt umbennen
ActiveSheet.Name = "kumuliert"
'Filter entfernen
Selection.AutoFilter
' Spalte fixieren löschen
ActiveWindow.FreezePanes = False
' Loescht leere Spalten
Columns("Y:Y").Select
Selection.Delete Shift:=xlToLeft
Columns("X:X").Select
Selection.Delete Shift:=xlToLeft
Columns("W:W").Select
Selection.Delete Shift:=xlToLeft
Columns("V:V").Select
Selection.Delete Shift:=xlToLeft
Columns("U:U").Select
Selection.Delete Shift:=xlToLeft
Columns("T:T").Select
Selection.Delete Shift:=xlToLeft
Columns("S:S").Select
Selection.Delete Shift:=xlToLeft
Columns("R:R").Select
Selection.Delete Shift:=xlToLeft
Columns("Q:Q").Select
Selection.Delete Shift:=xlToLeft
'Löschen der Zeile, wenn Zelle in Spalte A leer ist
Dim introw As Integer, intLastRow As Integer
intLastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
For introw = intLastRow To 1 Step -1
If Application.CountA(Rows(introw)) = 0 Then
intLastRow = intLastRow - 1
Else
Exit For
End If
Next introw
For introw = intLastRow To 1 Step -1
If IsEmpty(Cells(introw, 1)) Then
Rows(introw).Delete
End If
Next introw
'Spalte A  Zeilen löschen wenn Inhalt TI ab Zeile 2
Do While Not IsError(var)
var = Application.Match(" TI", Columns(1), 0)
If Not IsError(var) Then Cells(var, 1).Delete xlShiftUp
Loop
'Spalte B Zeilen löschen ohne Wert 63611 , 63613 ab Zeile 2
For X = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1
If Cells(X, 2) <> 63611 And Cells(X, 2) <> 63613 Then Rows(X).Delete
Next
'Bereich Makieren
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
'Bereich kopieren
Selection.Copy
'Arbeitsblatt wechseln
Windows("Datenpool.xlsm").Activate
'Tabellenblatt wechseln
Sheets("AS-Bericht").Select
'Erste Freie Zeile in A finden
Range("A1").Select
Selection.End(xlDown).Offset(1, 0).Select
'Einfügen
ActiveSheet.Paste
'Duplicate entfernen
For i = Range("E65536").End(xlUp).Row To 2 Step -1
If Application.WorksheetFunction.CountIf(Range("E:E"), Cells(i, 5)) > 1 Then Rows(i).Delete
Next i
'Tabellenblatt wechseln
XXXXWindows("kumuliert1243675.xlsx").ActivateXXXXX
'Zwischenspeicher leeren
Application.CutCopyMode = False
'Date schließen ohne zu speichern
XXXXWorkbooks("kumuliert1243675.xlsx").Close savechanges:=FalseXXXX
'Datum der aktualisierung einfügen
Sheets("Datenpool").Range("B2").Value = Date & "/" & Time
'Tabellenblatt wechseln
Sheets("Datenpool").Select
'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True
'Anzeige MsgBox
MsgBox "Aktualisierung erfolgreich"
End Sub

Betrifft: AW: Datei öffnen mit variablen im Namen
von: 1714233.html
Geschrieben am: 21.09.2019 20:59:53
ersetze "kumuliert1243675.xlsx" durch die Variable lstrDatei

Betrifft: AW: Datei öffnen mit variablen im Namen
von: 1714238.html

Geschrieben am: 21.09.2019 22:56:20
Perfekt , Danke
Nur jetzt habe ich ein andres Problem . Wenn er die Datei kumuliert nicht findet setzt Excel das Makro auf die geöffnete Datei an und schreibt mir das Tabellenblatt um und löscht einige Zeilen .
Besteht die Möglichkeit ein Makro zu stoppen so bald irgendein Fehler auftritt ?
Mein Makro :
Sub ASBerichtLaden()
'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False
'Datei kumuliert öffnen egal was für Zusätze im Dateinamen stehen
lstrDatei = Dir("C:\Users\OliS\Desktop\Daten\Ausschuss\*kumuliert*.xlsx")
If lstrDatei <> "" Then
Workbooks.Open ("C:\Users\OliS\Desktop\Daten\Ausschuss\" & lstrDatei)
Else
MsgBox "Datei nicht vorhanden :-("
End If
'Filter entfernen
Selection.AutoFilter
' Spalte fixieren löschen
ActiveWindow.FreezePanes = False
' Löscht leere Spalten
Columns("Y:Y").Select
Selection.Delete Shift:=xlToLeft
Columns("X:X").Select
Selection.Delete Shift:=xlToLeft
Columns("W:W").Select
Selection.Delete Shift:=xlToLeft
Columns("V:V").Select
Selection.Delete Shift:=xlToLeft
Columns("U:U").Select
Selection.Delete Shift:=xlToLeft
Columns("T:T").Select
Selection.Delete Shift:=xlToLeft
Columns("S:S").Select
Selection.Delete Shift:=xlToLeft
Columns("R:R").Select
Selection.Delete Shift:=xlToLeft
Columns("Q:Q").Select
Selection.Delete Shift:=xlToLeft
'Löschen der Zeile, wenn Zelle in Spalte A leer ist
Dim introw As Integer, intLastRow As Integer
intLastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
For introw = intLastRow To 1 Step -1
If Application.CountA(Rows(introw)) = 0 Then
intLastRow = intLastRow - 1
Else
Exit For
End If
Next introw
For introw = intLastRow To 1 Step -1
If IsEmpty(Cells(introw, 1)) Then
Rows(introw).Delete
End If
Next introw
'Spalte A  Zeilen löschen wenn Inhalt TI ab Zeile 2
Do While Not IsError(var)
var = Application.Match(" TI", Columns(1), 0)
If Not IsError(var) Then Cells(var, 1).Delete xlShiftUp
Loop
'Spalte B Zeilen löschen ohne Wert 63611 , 63613 ab Zeile 2
For X = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1
If Cells(X, 2) <> 63611 And Cells(X, 2) <> 63613 Then Rows(X).Delete
Next
'Bereich Makieren ab A2 letzte beschriebene Zeile und Spalte
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
'Bereich kopieren
Selection.Copy
'Arbeitsblatt wechseln
Windows("Laufkartenprogramm AL 3.1.xlsm").Activate
'Tabellenblatt wechseln
Sheets("AS-Bericht").Select
'Erste Freie Zeile in A finden
Range("A1").Select
Selection.End(xlDown).Offset(1, 0).Select
'Einfügen
ActiveSheet.Paste
'Duplicate entfernen
For i = Range("E65536").End(xlUp).Row To 2 Step -1
If Application.WorksheetFunction.CountIf(Range("E:E"), Cells(i, 5)) > 1 Then Rows(i).Delete
Next i
'Tabellenblatt wechseln
Windows(lstrDatei).Activate
'Zwischenspeicher leeren
Application.CutCopyMode = False
'Date schließen ohne zu speichern
Workbooks(lstrDatei).Close savechanges:=False
'Datum der aktualisierung einfügen
Sheets("LaufkartenProgramm Alu").Range("B2").Value = Date & "/" & Time
'Tabellenblatt wechseln
Sheets("LaufkartenProgramm Alu").Select
'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True
'Anzeige MsgBox
MsgBox "Aktualisierung erfolgreich ;-)"
End Sub

Betrifft: AW: Datei öffnen mit variablen im Namen
von: 1714239.html
Geschrieben am: 21.09.2019 23:04:54
Hallo Marc,
dann mußt du halt hier mit Exit Sub aus dem Makro aussteigen.

If lstrDatei <> "" Then
Workbooks.Open ("C:\Users\OliS\Desktop\Daten\Ausschuss\" & lstrDatei)
Else
MsgBox "Datei nicht vorhanden :-("
Exit Sub
End If
Gruß Werner
Excel-Beispiele zum Thema "Datei öffnen mit variablen im Namen"
Alle Dateien im Verzeichnis öffnen Web-Seiten mit Excel95 öffnen
Arbeitsmappe mit dem Namen des aktuellen Datums öffnen Dateien aus Listbox auslesen und öffnen
Fußzeilen beim Öffnen eintragen Arbeitsmappe ohne Rückfrage nach Aktualisierung öffnen
Datei öffnen, deren Name in einer Zelle steht Beim Öffnen neue Symbolleiste
Symbolleisten beim Öffnen aus-, beim Schließen einblenden Geburtstagsmeldung bei Öffnen der Arbeitsmappe
Bewerten Sie hier bitte das Excel-Portal