Microsoft Excel

Herbers Excel/VBA-Archiv

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

Ordner durchsuchen und richtiges XLS öffnen | Herbers Excel-Forum


Betrifft: Ordner durchsuchen und richtiges XLS öffnen von: Martin
Geschrieben am: 16.11.2009 11:00:07

Guten Tag

Ich haben einen Order "Excellisten" auf dem C:, die eine Excel-Mappe für jeden Tag enthält. Ich möchte nun folgendes mit einem Makro machen:
- die neuste Mappe im Ordner öffnen und schauen, welches das höchste Datum in Spalte D ist.
- falls dieses höchste Datum in dem gegenwärtigen Monat liegt, die Mappe wieder zu machen , die einen Tag ältere Mappe öffnen und das gleiche wiederholen
- falls das höchste Datum im letzten Monat liegt, diese Mappe offen lassen und das Makro beenden

Besten Dank für Eure Hilfe.

Martin

  

Betrifft: AW: Ordner durchsuchen und richtiges XLS öffnen von: JogyB
Geschrieben am: 16.11.2009 11:09:19

Hi.

Wie sieht das Datumsformat im Dateinamen aus? Oder soll das nach dem Änderungsdatum der Datei gehen?

Gruss, Jogy


  

Betrifft: AW: Ordner durchsuchen und richtiges XLS öffnen von: Martin
Geschrieben am: 16.11.2009 11:16:14

Der Dateiname sieht wie folgt aus: "abcef_20091116.xls", es gibt jeden Tag via Batch-Lauf eine Datei mit entsprechendem Datum im Namen.
Die Datümer (schreib's mal so, damit man es nicht mit Daten verwechselt) in Spalte D der Liste sind als Datum formatiert (TT.MM.JJJJ). Der Tag ist immer 01.

Besten Dank


  

Betrifft: AW: Ordner durchsuchen und richtiges XLS öffnen von: Martin
Geschrieben am: 16.11.2009 11:24:25

habe vergessen, Frage noch offen anzukreuzen.....Sorry


  

Betrifft: AW: Ordner durchsuchen und richtiges XLS öffnen von: JogyB
Geschrieben am: 16.11.2009 12:06:19

Hi.

Probier das mal aus:

' Anmerkung: Ich habe absichtlich nicht mit FindFile gearbeitet,
' da das in Excel 2007 nicht mehr funktionieren würde
' Die Excel4 Makros, die ich zum auslesen verwende, gibt es glaube
' ich noch
Sub Datum_checken()

    Dim i As Long
    Dim dateiNum As String
    Dim myDatei As String
    Dim fileDate As Date
    Dim maxDate As Date
    Const myPath = "c:\Temp\test\"
    Const tabName = "Tabelle1"
    
    ' In Frage kommende Dateien zählen - wird als Abbruchkriterium benötigt
    ' Wenn es keine gibt, dann gleich raus
    If Dir(myPath & "*_*.xls") = "" Then
        Call MsgBox("Keine Dateien gefunden!", vbCritical)
        Exit Sub
    Else
        dateiNum = 1
    End If
    
    ' Dateien mit richtigem Format zählen
    Do
        myDatei = Dir
        If myDatei Like "*_########.xls" Then
            dateiNum = dateiNum + 1
        End If
    Loop Until myDatei = ""
    
    ' Jetzt die Datei suchen, in der ein Datum von letztem Monat vorkommt
    
    Do
        fileDate = DateSerial(Year(Date), Month(Date), Day(Date) - i)
        ' Habe das hier mit einem variablen Dateibeginn gemacht
        ' Bei fixem Beginn ersetzt Du myPath durch das "abcdef" (mit Anführungszeichen)
        myDatei = Dir(myPath & "*_" & _
            Format(DateSerial(Year(Date), Month(Date), Day(Date) - i), "yyyymmdd") & ".xls")
        If myDatei <> "" Then
            ' höchstes Datum auslesen
            maxDate = CDate(ExecuteExcel4Macro("MAX('" & myPath & _
                "[" & myDatei & "]" & tabName & "'!C4:C4)"))
            ' Wenn Datum aus letztem Monat, dann öffnen
            If DateSerial(Year(Date), Month(Date) - 1, 1) = _
                DateSerial(Year(maxDate), Month(maxDate), 1) Then
                
                Workbooks.Open (myPath & myDatei)
                Exit Do
            Else
                i = i + 1
            End If
        End If
    
    Loop Until i = dateiNum
    
    ' Wenn i hier auf Dateinum steht, dann wurde nichts gefunden
    If i = dateiNum Then
        Call MsgBox("Keine Datum aus letztem Monat gefunden!", vbCritical)
    End If
    
End Sub

Gruss, Jogy


  

Betrifft: AW: Ordner durchsuchen und richtiges XLS öffnen von: Martin
Geschrieben am: 16.11.2009 13:37:00

Hallo JogyB

Vielen herzlichen Dank für das Makro! Ich werd's gleich mal ausprobieren.

Grüsse aus der Schweiz

Martin


  

Betrifft: AW: Ordner durchsuchen und richtiges XLS öffnen von: Martin
Geschrieben am: 16.11.2009 15:10:55

Ich habe das Modul für meine Liste wie folgt angepasst (myPath natürlich auch):

maxDate = CDate(ExecuteExcel4Macro("MAX('" & myPath & _
"[" & myDatei & "]" & Left(myDatei, 20) & "'!C4:C4)"))

Diese Zeile ergibt bei mir einen Laufzeitfehler 13 (***Bei geöffneter Datei funktioniert es aber***).

zur Info: Das Tabellenblatt heisst gleich wie die Datei (es sind 20 Zeichen .xls, daher habe ich ein Left eingefügt.)

Besten Dank


  

Betrifft: AW: Ordner durchsuchen und richtiges XLS öffnen von: JogyB
Geschrieben am: 16.11.2009 15:25:53

Hi.

Kann das nicht nachvollziehen, bei mir funktioniert es... probier mal

maxDate = CDate(ExecuteExcel4Macro("MAX('" & myPath & _
"[" & myDatei & "]" & Replace(myDatei, ".xls", "") & "'!C4:C4)"))

oder

maxDate = CDate(ExecuteExcel4Macro("MAX('" & myPath & _
"[" & myDatei & "]" & Left(myDatei, Len(myDatei) - 4) & "'!C4:C4)"))

Dann ist es egal, wie viele Buchstaben es sind, es macht einfach das .xls weg.

Gruss, Jogy


  

Betrifft: AW: Ordner durchsuchen und richtiges XLS öffnen von: Martin
Geschrieben am: 16.11.2009 15:38:41

Hallo Jogy
Danke nochmals für die Hilfe.

Ich hab's mit beiden (replace und left-len) probiert, doch es gibt immer noch diesen Laufzeitfehler 13. Wie gesagt, wenn die Datei geöffnet ist, funktioniert es problemlos, daher kann es kein Tippfehler sein, denke ich.
Leider habe ich keine Ahnung, an was es liegen könnte.

Was macht denn diese ExecuteExcel4Macro genau? Gibt es da besondere Einstellungen, die vorhanden sein müssten? (und was ist das !C4:C4? Ist wohl Column 4, aber wieso das "!")

Vielen Dank


  

Betrifft: AW: Ordner durchsuchen und richtiges XLS öffnen von: JogyB
Geschrieben am: 16.11.2009 15:59:12

Hi.

Das ist ein zugriff auf alte Excel4 Makros. Das ist nirgends mehr dokumentiert, funktioniert aber noch. Damit gehen einige schöne Dinge, die Excel nicht mehr kann, so z.B. der Zugriff auf geschlossene Dateien.

In der Klammer von ExecuteExcel4Macro muss folgendes stehen, wenn die Datei z.B. abcef_20091113.xls heißt:
MAX('c:\Temp\test\[abcef_20091113.xls]abcef_20091113'!C4:C4)

C4 ist in der Tat Spalte 4, das Ausrufezeichen ist doch eigentlich auch logisch, das ist die ganz normale Syntax für einen Bezug auf eine andere Datei (nur in Z1S1-Schreibweise und auf englisch).

Die Alternative wäre jetzt natürlich, jede Datei aufzumachen. Sähe dann so aus:

Sub Datum_checken2()

    Dim i As Long
    Dim dateiNum As String
    Dim myDatei As String
    Dim fileDate As Date
    Dim maxDate As Date
    Dim testDatei As Workbook
    Const myPath = "c:\Temp\test\"
    
    ' In Frage kommende Dateien zählen - wird als Abbruchkriterium benötigt
    ' Wenn es keine gibt, dann gleich raus
    If Dir(myPath & "*_*.xls") = "" Then
        Call MsgBox("Keine Dateien gefunden!", vbCritical)
        Exit Sub
    Else
        dateiNum = 1
    End If
    
    ' Dateien mit richtigem Format zählen
    Do
        myDatei = Dir
        If myDatei Like "*_########.xls" Then
            dateiNum = dateiNum + 1
        End If
    Loop Until myDatei = ""
    
    Application.ScreenUpdating = False
    
    ' Jetzt die Datei suchen, in der ein Datum von letztem Monat vorkommt
    Do
        fileDate = DateSerial(Year(Date), Month(Date), Day(Date) - i)
        ' Habe das hier mit einem variablen Dateibeginn gemacht
        ' Bei fixem Beginn ersetzt Du myPath durch das "abcdef" (mit Anführungszeichen)
        myDatei = Dir(myPath & "*_" & _
            Format(DateSerial(Year(Date), Month(Date), Day(Date) - i), "yyyymmdd") & ".xls")
        If myDatei <> "" Then
            ' Datei schreibgeschützt öffnen (minimiert mögliche Fehler)
            Set testDatei = Workbooks.Open(myPath & myDatei, , True)
            ' Überprüfen, ob Öffnen geklappt hat
            If testDatei Is Nothing Then
                Call MsgBox("Konnte Datei '" & myDatei & "' nicht öffnen!" & vbNewLine & _
                    "Vorgang wird abgebrochen.", vbCritical)
                Application.ScreenUpdating = True
                Exit Sub
            End If
            
            ' höchstes Datum auslesen
            maxDate = _
                Application.Max(testDatei.Sheets(Left(myDatei, Len(myDatei) - 4)).Columns(4))

            ' Wenn Datum aus letztem Monat, dann Schreibzugriff + raus
            If DateSerial(Year(Date), Month(Date) - 1, 1) = _
                DateSerial(Year(maxDate), Month(maxDate), 1) Then
                
                testDatei.ChangeFileAccess xlReadWrite
                Exit Do
            Else
                i = i + 1
                ' Datei wieder zu
                testDatei.Close False
                Set testDatei = Nothing
            End If
        End If
    
    Loop Until i = dateiNum
    
    ' Wenn i hier auf Dateinum steht, dann wurde nichts gefunden
    If i = dateiNum Then
        Call MsgBox("Keine Datum aus letztem Monat gefunden!", vbCritical)
    End If
    
    Application.ScreenUpdating = True
    
End Sub

Das fängt jetzt nicht ab, ob die Datei schon offen ist.

Gruss, Jogy


  

Betrifft: AW: Ordner durchsuchen und richtiges XLS öffnen von: Martin
Geschrieben am: 16.11.2009 16:12:17

Besten Dank für die grosse Hilfe. Ich versuchen, dem Problem irgendwie auf den Grund zu kommen, falls nicht, versuch ich's halt mit dem Öffnen der Dateien.

Viele Grüsse

Martin


Beiträge aus den Excel-Beispielen zum Thema "Ordner durchsuchen und richtiges XLS öffnen"