Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

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

Beiträge aus dem Excel-Forum zum Thema "Datei öffnen mit variablen im Namen"