Ich habe es so gelöst.
Du kannst den Monat und das Jahr angeben.
Dann wird ein Blatt z.B. 08.2020 gesucht oder neu angelegt.
Für jeden Tag des Monats (Monatsende wird ermittelt) wird dort ein Eintrag erstellt und der Wert aus der entsprechenden Datei gelesen
in ein Modul.
Code:
Option Explicit
Sub Wasser()
Dim TB As Worksheet
Dim iMonat As Integer, iJahr As Integer
Dim iETag As Date, iLTag As Date, i As Date
Dim Pfad As String, GPfad As String, Datei As String, Blatt As String, Bezug As String
Dim Ext As String, BlName As String
Dim JaNein As Variant, Wert As Variant
Pfad = "E:\Excel\temp\Wasserverteilung\Betriebsdatenprotokolle\" 'MIT \ am Ende
Ext = ".xlsx"
Blatt = "Gesamtübersicht Teil II"
Bezug = "HB32"
iMonat = InputBox("Monat", , Month(Date))
iJahr = InputBox("Jahr", , Year(Date))
iETag = DateSerial(iJahr, iMonat, 1) ' Erster Tag das aktuellen Monats
iLTag = DateSerial(iJahr, iMonat + 1, 0) ' Letzter Tag des aktuellen Monats
GPfad = Pfad & iJahr & "\" & iMonat & "\" 'Gesamtpfad
BlName = Format(iMonat, "00") & "." & iJahr
'Prüfen, ob Blatt schon vorhanden ist
If IsError(Evaluate(BlName & "!A1")) Then
'Neues Blatt für aktuellen Monat anlegen und benennen
Set TB = Sheets.Add(After:=Sheets(Sheets.Count))
TB.Name = BlName
Else
Set TB = Sheets(BlName)
TB.Cells.Clear
End If
'Daten für jeden Tag des Monats lesen
For i = iETag To iLTag
Datei = GPfad & i & Ext
Wert = GetValue(GPfad, i & Ext, Blatt, Bezug)
If Wert <> "##" Then
TB.Cells(Day(i), 1) = i
TB.Cells(Day(i), 2) = Wert
Else
'Datei nicht vorhanden
JaNein = MsgBox("Datei: '" & i & Ext & "' ist im Verzeichnis:" & vbLf & _
GPfad & vbLf & "nicht vorhanden", vbExclamation + vbOKOnly)
Exit Sub
End If
Next
End Sub
Private Function GetValue(Pfad, Datei, Blatt, Zelle)
'** Daten aus geschlossener Arbeitsmappe auslesen
'*** Dimensionierung der Variablen
Dim arg As String
'Sicherstellen, dass das datei vorhanden ist
If Right(Pfad, 1) <> "\" Then Pfad = Pfad & "\"
If Dir(Pfad & Datei) = "" Then
GetValue = "##"
Exit Function
End If
'** Das Argument erstellen
arg = "'" & Pfad & "[" & Datei & "]" & Blatt & "'!" & Range(Zelle).Range("A1").Address(, , xlR1C1)
'** Auslesen über Excel4Macro
GetValue = ExecuteExcel4Macro(arg)
End Function