5k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,

ich habe leider nicht ganz so viel Ahnung von Excel und wende mich mit meinem Anliegen daher an euch:

Ich habe mehrere Ordner, die nach der Kalenderwoche sortiert sind.
In diesen Ordnern liegen mehrere Stundenzettel als Exceldateien.

Ich möchte jetzt eine Übersichtsdatei haben, in dem Tabellen automatisch generiert werden. Was soll da drin stehen?

Die Tabellen sollen die jeweilige KW als Überschrift haben. (Die ist ja als Ordnername vorhanden). Dann in der Tabelle soll stehen die Baustellenanschrift: (Feld=D9) und dann die Stundenanzahl (Feld=J24)

Dann wenn er alle Dateien ausgelesen hat soll die Gesamtstunden der Woche unter der Tabelle stehen.

Dann wenn er mit dem einen Ordner bzw. Woche fertig ist, soll er für den nächsten Ordner (KW) eine neue Tabelle anfertigen.

Eine Schwierigkeit ist, das meisten eine verschiedene Anzahl von Exceltabellen im Ordner liegen.

Ich bedanke mich schonmal im vorraus für eure Mühe.

MfG Kaelan

23 Antworten

0 Punkte
Beantwortet von
hmm irgendwie klappt das net hoffe aber du steigst da durch
0 Punkte
Beantwortet von theblackbird_ Mitglied (605 Punkte)
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.
0 Punkte
Beantwortet von
Vielen vielen Dank das hat das Problem beseitigt.

Ich danke dir für deine Mühe und Unterstützung. Und Respekt das du den Code so in einer Nacht alles geschrieben hast. Immerhin habe ich für meinen Code Stunden gebraucht bis da überhaupt mal was funktionierte.

MfG Kaelan
...