Moin,
Ohja, der Fall ist mir glatt durchgerutscht...
Was passiert? Es wird ein JahresSheet angelegt, da ja ein entsprechendes gueltiges Verzeichnis mit min. einem Unterverzeichnis existiert.
Es ist aber kein ExcelFile vorhanden, welches ein StdZettel sein koennte. Also bleibt fuer diese "Runde" die Variable lngMaxRow eben =0.
Fuer die Summenfunktion ziehe ich aber genau diese Variable heran. Und eine Cells(0,irgendwas) gibt es in Excel nunmal nicht=> Fehler
Nun koennte man mit einem
If lngMaxRow>0 der SummenBerechnung eine Bedingung voransetzen. Bliebe aber das Sheet, welches keine Daten enthaelt... -> unschoen.
Da wuerde ich eher etwas Laufzeit opfern und eine entsprechende Pruefung voransetzen, bevor das Sheet (in Deinem Testfall dann 2012) ueberhaupt angelegt wird.
Lege Dir dazu eine neue Variable an (
Dim blnNewSheet As Boolean 'neues Sheet? )
Und dann aendere den "Einstieg" zum Daten sammeln einmal wie folgt:
'===================================
'Daten sammeln
'===================================
For Each objSubfolder In objSubfolders 'Unterverzeichnisse durlaufen
'-------------------------------------
'Pruefung ob min. ein ExcelFile in VerzeichnisStruktur vorhanden
'welches ein Std-Zettel sein koennte
blnNewSheet = False 'neues Sheet = Nein
For Each objSubSubFolder In objSubfolder.SubFolders 'UnterUnterverzeichnisse durchlaufen
If objSubSubFolder.Name Like "KW##" Then 'Wenn .Name = KW und 2 Ziffern
For Each objFile In objSubSubFolder.Files 'StdZettel durchlaufen
If Right(objFile.Name, 5) Like "*xls*" Then 'Wenn ExcelFile
blnNewSheet = True 'neues Sheet = JA
Exit For
End If
Next objFile
End If
If blnNewSheet Then Exit For
Next objSubSubFolder
'Pruefung ENDE
'--------------------------------------
If objSubfolder.Name Like "####" And _
objSubfolder.SubFolders.Count > 0 And blnNewSheet Then 'Wenn Unterverzeichnisname = 4Ziffern + Unterverz +Excel-File
Set wksDest = wbkDest.Sheets.Add _
(after:=wbkDest.Sheets(wbkDest.Sheets.Count), Type:=xlWorksheet) 'neues JahresSheet
wksDest.Name = objSubfolder.Name 'Name = Jahr
lngCol = 0 'Spaltenzaehler ruecksetzen
lngMaxRow = 0 'MaxZeile zuruecksetzen
.
.
.
Somit sollte bei Deinem TestFall das Sheet fuer 2012 gar nicht erst angelegt werden.
Cu
TheBlackBird ®
btw: Wenn der Debugger anspringt und die fehlerhafte Zeile im Code markiert ist, dann kannst Du mal mit dem Mauszeiger/Cursor auf die einzelnen Variablen zeigen. Es sollte Dir der jeweils aktuelle Wert der Variablen als "Tooltip" angezeigt werden. So kann man dann bei lngMaxRow die "0" sehen. Und da Excel keine Zeile 0 kennt, kommt man so, ohne weiteres Zutun, dem Fehler auf die Spur.