Excel: Anzahl Blätter in einer Mappe

Guten Tag,

ich möchte in einer Excel-Datei ‚Mappe2.xls‘ in einer Spalte angeben,
wieviele Blätter/Tabellen die Excel-Datei ‚Mappe1.xls‘ enthält.

Ich habe schon danach gegoogelt, und das einzige, was ich gefunden habe, ist folgender Makro-Schnipsel:

Sub BlaetterZaehlen2()
For Each Blatt In Sheets
i = i + 1
Next
Sheets(1).Select
Range("A1").Value = i
End Sub

Jedoch gibt er mir für Range() einen Syntax-Fehler zurück.

Selbst wenn das aber funktionieren würde, es ist nicht dateiübergreifend!

HILFE?! :smile:

ich möchte in einer Excel-Datei ‚Mappe2.xls‘ in einer Spalte
angeben,
wieviele Blätter/Tabellen die Excel-Datei ‚Mappe1.xls‘
enthält.

Hi Phil,

ungetest:

Sub BlaetterZaehlen()
thisworkbook.worksheets(„Tabelle1“).range(„A1“)=workbooks(„Mappe1.xls“).worksheets.count
End Sub

Gruß
Reinhard

Laufzeitfehler ‚9‘

Index außerhalb des gesuchten bereiches

Laufzeitfehler ‚9‘

Index außerhalb des gesuchten bereiches

Hi Phil,

ja und, ist das ein Grund so formlos zu antworten?

Wenn du in der Mappe in der du den Code startest kein Blatt hast was exakt „Tabelle1“ heißt kommt diese Meldung.

PS: die ganzen Leerzeilen in meinem dreizeilen Code kommen von W-w-w:frowning:

Gruß
Reinhard

Grüezi zusammmen

Laufzeitfehler ‚9‘
Index außerhalb des gesuchten bereiches

Wenn du in der Mappe in der du den Code startest kein Blatt
hast was exakt „Tabelle1“ heißt kommt diese Meldung.

…wenn die Mappe deren Blätter gezäht werden sollen geschlossen ist, auch… :wink:

Öffne daher die zu prüfende Mappe, dann klappt es.

Mit freundlichen Grüssen

Thomas Ramel
[Win XP Pro SP-2 / xl2003 SP-3]

Grüezi Thomas,

ich wollte gerad bei Hans im Forum ncahfragen aber wenn du grad online bist ist das gleichwertig.

In dieser Mappe:
http://www.hostarea.de/server-01/Januar-de654fcefe.xls

wo ich den Vba-Code für eine Anfrage eineige Beiträge tiefer gebastelt habe, stieß ich auf ein Problem.
Da gibts 237 Checkboxen, bei Klick auf einen CommandBiutton sollen alle gesetzt werden.

Okay, kein Problem, mache ich damit:

Private Sub CommandButton2\_Click()
Dim Obj As Object
For Each Obj In ActiveSheet.OLEObjects
 If Obj.Name Like "Ch\*" Then Obj.Object.Value = True
Next Obj
End Sub

Nun klickt man auf den CommanButton, 10 sek tut sich nix, dann werden die Häkchen gesetzt.

Nun werden in der langen Zeit die User unruhig weil sie denken es wird nix passieren.

Deshalb wollte ihnen zur Laufzeit des Codes mit einer UF oder Hinweis in einer Zelle (nur zur Laufzeit ist die Schrift lesbar, ansonsten weiß, einen Hinweis geben daß es noch dauert…

Das ging aber nahezu vollkommen schief :frowning:

Private Sub CommandButton2_Click()
Userform1.show
Dim Obj As Object
For Each Obj In ActiveSheet.OLEObjects
If Obj.Name Like „Ch*“ Then Obj.Object.Value = True
Next Obj
unload Userform1
End Sub

brachte nix, genauso wie wenn ich anfangs und am Ende des Codes die Farbe der Anzeigezelle ändere.

Es klappt beides schon, aber nur für 1-2 Sekunden.
D.h., in dem Beispiel wird die UF für 1-2 Sekunden angezeigt, dann ist sie weg.
Die Änderung der Checkboxen erfolgt nach wie vor erst 8 Sek später.

Wie bekomme ich es hin, das die UF so lange erscheint bis alle Checkboxen auf True gesetzt wurden?

Jetzt komme bitte nicht mit Application.Screenupdating oder so banalem, da fall ich um *lächel*

Gruß
Reinhard

Grüezi Reinhard

ich wollte gerad bei Hans im Forum ncahfragen aber wenn du
grad online bist ist das gleichwertig.

Oh, Danke für die Blumen :smile:

Da gibts 237 Checkboxen, bei Klick auf einen CommandBiutton
sollen alle gesetzt werden.

Private Sub CommandButton2_Click()
Dim Obj As Object
For Each Obj In ActiveSheet.OLEObjects
If Obj.Name Like „Ch*“ Then Obj.Object.Value = True
Next Obj
End Sub

Nun klickt man auf den CommanButton, 10 sek tut sich nix, dann
werden die Häkchen gesetzt.

Holla, was ist denn da mit deinem System los?

Beim mir hier (Laptop mit Vista SP1 und Office2007 SP1 - 1 GB RAM, alos ältere Hardware) dauerts knapp 2 Sekunden, das ist durchaus zu verschmerzen, denke ich mal.

Nun werden in der langen Zeit die User unruhig weil sie denken
es wird nix passieren.

Deshalb wollte ihnen zur Laufzeit des Codes mit einer UF oder
Hinweis in einer Zelle (nur zur Laufzeit ist die Schrift
lesbar, ansonsten weiß, einen Hinweis geben daß es noch
dauert…

Das ging aber nahezu vollkommen schief :frowning:

Ja hier verschwindet die UF nicht mal und der Code wird angehalten, lade ich sie ‚Modeless‘ verschwindet sie gleich wieder.

Die Änderung der Checkboxen erfolgt nach wie vor erst 8 Sek
später.

Das kann ich so nicht nachvollziehen, muss an deiner Hardware liegen :wink:

Wie bekomme ich es hin, das die UF so lange erscheint bis alle
Checkboxen auf True gesetzt wurden?

Jetzt komme bitte nicht mit Application.Screenupdating oder so
banalem, da fall ich um *lächel*

Na, das wolln wir doch nicht, gell.

Ich habs wie gesagt mit vbModeless versucht, hat aber auch nicht hingehauen. Keine Ahnung also wie das mit einer F hinzukriegen ist.
Allenfalls mit Code in deren Initialize- oder Load EReignis, der das eigentliche Setzen der Checkboxen auslöst und die UF dann wieder entlädt?

Ev. wäre eine Meldung in der Statuszeile eine Idee, bläderweise wird diese aber nur zu oft übersehen.

Mit freundlichen Grüssen

Thomas Ramel
[Win XP Pro SP-2 / xl2003 SP-3]

Grüezi Thomas,

ich wollte gerad bei Hans im Forum ncahfragen aber wenn du
grad online bist ist das gleichwertig.

Oh, Danke für die Blumen :smile:

Tatsachen sind Tatsachen :smile:

Da gibts 237 Checkboxen, bei Klick auf einen CommandBiutton
sollen alle gesetzt werden.
Nun klickt man auf den CommanButton, 10 sek tut sich nix, dann
werden die Häkchen gesetzt.

Holla, was ist denn da mit deinem System los?

Ich habe es jetzt mal mangels Stoppuhr mit Abzählen probiert, also einundzwanzig vor sich hin sagen usw, im Schnitt kam ich auf 29.
Dieter Thomas Heck wär da locker auf 65 gekommen :smile:

Also ist es schon so, daß makro ist fix fertig, aber die Umsetzung dauert nahezu 10 sek.

Beim mir hier (Laptop mit Vista SP1 und Office2007 SP1 - 1 GB
RAM, alos ältere Hardware) dauerts knapp 2 Sekunden, das ist
durchaus zu verschmerzen, denke ich mal.

1 GB Arbeitsspeicher ist für dich ältere Hardware? Na, dann sag ich mal lieber nicht was ich habe.
Wenn du mal olle Klamotten an Hardware loswerden willst, ich nehme das gerne an *gg*

Ich habs wie gesagt mit vbModeless versucht, hat aber auch
nicht hingehauen. Keine Ahnung also wie das mit einer F
hinzukriegen ist.
Allenfalls mit Code in deren Initialize- oder Load EReignis,
der das eigentliche Setzen der Checkboxen auslöst und die UF
dann wieder entlädt?

Danke für deine Gedanken in dieser Richtung. Aber daran liegt es nicht. Muß wohl an meinem PC liegen.
Denn wenn ich in einem 5zeiligen Code anfangs einen Zellinhalt der sonst weiße Schrift hat auf rot setze um während der Laufzeit den Inhalt anzuzeigen und am Ende des Codes wieder sage Schriftfarbe ist wieder weiß, dann sollte das bitteschön auch so klappen.

Von daher liegt es nicht an UF-Spezialitäten. Es liegt daran, der Code läuft sauber durch und ist schon längst beendet, dann erst wird, bei mir nach ca. 6 Sek auf dem Bildschirm die Umstzung (also z.B. Häkchen setzen) sichtbar.

Die Frage für mich lautet nun nicht mehr wie schaffe ich es eine Meldung zur Laufzeit eines Codes anzuzeigen daß der Code grad arbeitet, sondern wie schaffe ich es, daß diese meldung solange erscheint bis auch die Änderungen durch den Code sichtbar sind.

Wie diese Meldung erscheint, UF, Schriffarbe einer Zelle, Einblenden eines Textfeldes, oder oder ist egal.

Excel ist ja nie zu trauen in welcher Reihenfolge es manches abarbeitet. Jetzt beim Schreiben dieses Textes kommt mit die Idee, zum Abschalten der Meldung das Change-Ereignis der zuletzt von Excel abgearbeiteten Checkbox auszunutzen.

Kaum geschrieben sehe ich schon Schwierigkeiten, wird das Change-Ereignis auch ausgelöst wenn die Chechbox schon auf True stand und ich setze sie auf True?
(Das kann ich ja selbst nachher fix testen.)
Wenn nicht kann ich diese Idee gleich wieder in die Tonne werfen :frowning:

Gruß
Reinhard

Ev. wäre eine Meldung in der Statuszeile eine Idee,
bläderweise wird diese aber nur zu oft übersehen.

Mit freundlichen Grüssen

Thomas Ramel
[Win XP Pro SP-2 / xl2003 SP-3]

Sehr interessant das alles!
Aber vielen Dank, wenn ich die andere Mappe geöffnet habe, funktioniert das shconmal - ist zwar keine Traumlösung aber damit kann man schonmal arbeiten!

Excel ist ja nie zu trauen in welcher Reihenfolge es manches
abarbeitet. Jetzt beim Schreiben dieses Textes kommt mit die
Idee, zum Abschalten der Meldung das Change-Ereignis der
zuletzt von Excel abgearbeiteten Checkbox auszunutzen.

Grüezi Thomas,

ich habe es getestet, das Change-Ereignis wird fix ausgelöst, aber die Bildschirmaktualisierung dauert danach halt noch ca. 6 sek.

Da es kein Worksheet:Refresh-Ereignis o.ä. gibt kann man da wohl nichts machen. *denk*

Gruß
Reinhard

Kaum geschrieben sehe ich schon Schwierigkeiten, wird das
Change-Ereignis auch ausgelöst wenn die Chechbox schon auf
True stand und ich setze sie auf True?
(Das kann ich ja selbst nachher fix testen.)
Wenn nicht kann ich diese Idee gleich wieder in die Tonne
werfen :frowning:

Gruß
Reinhard

Ev. wäre eine Meldung in der Statuszeile eine Idee,
bläderweise wird diese aber nur zu oft übersehen.

Mit freundlichen Grüssen

Thomas Ramel
[Win XP Pro SP-2 / xl2003 SP-3]

Sehr interessant das alles!
Aber vielen Dank, wenn ich die andere Mappe geöffnet habe,
funktioniert das shconmal - ist zwar keine Traumlösung aber
damit kann man schonmal arbeiten!

Hi Phil,

sorry, daß ich deine Beitragsfolge mißbraucht habe.
Wie sehe denn deine Traumlösung aus?

Natürlich geht es auch die Blattanzahl zu erfahren wenn die Mappe geschlossen ist. D.h. der Vba-Code öffnet die Mappe kurz, zählt die Blätter und schließt sie wieder und zeigt die Anzahl an oder schreibt sie in eine Zelle.

Wäre das die Traumlösung?
Wie willst du dem Code den Namen der Mappe übergeben?
In eine Zelle schreiben, in den Code schreiben, aus einer dateiliste auswählen?

Gruß
Reinhard

OT @Thomas
Grüezi Thomas,

ich hab gerade andernorts nachgefragt. Ich berichte dann hier falls sich was ergibt.

Gruß
Reinhard, *nie sehr geduldig* :smile:

Grüezi Reinhard

ich hab gerade andernorts nachgefragt. Ich berichte dann hier
falls sich was ergibt.

Reinhard, *nie sehr geduldig* :smile:

Kein Problem, Peinhard - ich war gestern mit der Familie im Schnee und hatte kein Laptop mit (die hätten mich sonst wohl gelyncht :wink:)

Ich halte die Lösung mit den Checkboxen (habe die Beitrage gelesen gehabt) eh für nicht sehr praxistauglich.
Wenn eh schon VBA vewendet werden soll/muss, dann hätte der OP gleich mit einem EreignsiCode direkt in die Zelle schreiben können (‚X‘ setzen und wieder wegnehmen). Dann wäre auch das Löschen/Setzen aller ‚X‘ direkt über den Inhalt der Zellen wesentlich einfacher und schneller gewesen.

…aber das ist bloss meine bescheidene Ansicht… :wink:

Mit freundlichen Grüssen

Thomas Ramel
[Win XP Pro SP-2 / xl2003 SP-3]

Grüezi Thomas,

Kein Problem, Peinhard - ich war gestern mit der Familie im
Schnee und hatte kein Laptop mit (die hätten mich sonst wohl
gelyncht :wink:)

? bin ich echt so peinlich? Sorry, bin halt so *schäm* :smile:

kein Problem, nimm halt den Laptop nur mit wenn die Schneegrenze oberhalb der Baumgrenze ist *grins*

Ich halte die Lösung mit den Checkboxen (habe die Beitrage
gelesen gehabt) eh für nicht sehr praxistauglich.
Wenn eh schon VBA vewendet werden soll/muss, dann hätte der OP
gleich mit einem EreignsiCode direkt in die Zelle schreiben
können (‚X‘ setzen und wieder wegnehmen). Dann wäre auch das
Löschen/Setzen aller ‚X‘ direkt über den Inhalt der Zellen
wesentlich einfacher und schneller gewesen.

Ja, das X-Stzen bzw X-Löschen kann man auf die Leertaste legen dann kommen auch die mit den dicken Fingern klar :smile:

Und wegen dem Zeitverzug beim Checkbox ändern per Vba, da hast du Recht aber auch nicht.
Deine Grundvermutung war/ist vollkommen richtig, es liegt am jeweiligen Rechner.
Mein Rechner hat 1,7 GHz Tempo und 512 MB Speicher, aber aufgrund meiner Nachfrage hat das netterweise jmd. getestet auf seinem Rechner mit 256 MB Speicher nd auch weniger Tempo, da dauerte das auch nur einen Wimpernschlag wie er schrieb.

Die xls habe ich dann noch bei mir mit XL97 getestet, gleiches Verhalten, also schließe ich Excel als Bremse aus.
Irgendwie/irgendwas bremst mein WinXP aus.

Auf den ratschlag des Antworteten hin habe ich schon mal papierkorb gleert und die Festplatten defragmentiert, das brachte nix, war aber sowieso überfällig.

Da dieser Zeitverzug auch passiert wenn Excel als einziges von mir gestartetes Programm läuft scheidet Firefox u.ä. auch aus.

Ergo ist entweder mein WinXP marode oder aber eines der anderen Programme die man im Taskmanager sieht bremst.

Apropos, im Zuge der Recherche deshalb stiess ich hier in der FAQ eines Windows-Brett auf Antispy,
http://www.xp-antispy.org/index.php/lang-de/download…
das half mir zwar auch nicht aber ich find das Klasse, teste es mal wenn du magst.

Ansonsten bin ich dabei Zug um Zug die Prozesse die der Taskmanager anzeigt zu überprüfen ob ich die brauche, das dauert halt.

Wenn ich dann diese Taskliste bereinigt habe bzw. gleuchzeitig kommt die Registry dran, die üblichen Verdächtigen, Einträge in Run, Runonce usw.

Wenn das alles nix nutzt, auch nicht Abschalten der Firewall,Virenscanner usw, naja, format c:\ /s …

Okay, das kriege ich irgendwie hin, insofern ist das Thema erledigt.

Das muß ja auch so sein, damit du Zeit hast dich darum zu kümmern:

http://wer-weiss-was.de/app/service/board_navi?Artik…

*lächel*

Gruß
Reinhard

…aber das ist bloss meine bescheidene Ansicht… :wink:

Mit freundlichen Grüssen

Thomas Ramel
[Win XP Pro SP-2 / xl2003 SP-3]

Grüezi Reinhard

Kein Problem, Peinhard - ich war gestern mit der Familie im
Schnee und hatte kein Laptop mit (die hätten mich sonst wohl
gelyncht :wink:)

? bin ich echt so peinlich? Sorry, bin halt so *schäm* :smile:

…vielleich was das ein Synonym zu ‚Beinhart‘ aus dem Werner-Comic… :wink:

Ich halte die Lösung mit den Checkboxen (habe die Beitrage
gelesen gehabt) eh für nicht sehr praxistauglich.
Wenn eh schon VBA vewendet werden soll/muss, dann hätte der OP
gleich mit einem EreignsiCode direkt in die Zelle schreiben
können (‚X‘ setzen und wieder wegnehmen). Dann wäre auch das
Löschen/Setzen aller ‚X‘ direkt über den Inhalt der Zellen
wesentlich einfacher und schneller gewesen.

Ja, das X-Stzen bzw X-Löschen kann man auf die Leertaste legen
dann kommen auch die mit den dicken Fingern klar :smile:

Oder halt auch wieder mit der Maus per Rechtsklick, oder Doppelklick, oder einfachem Klick - Möglichkeiten gibt es viele…

Und wegen dem Zeitverzug beim Checkbox ändern per Vba, da hast
du Recht aber auch nicht.
Deine Grundvermutung war/ist vollkommen richtig, es liegt am
jeweiligen Rechner.
Mein Rechner hat 1,7 GHz Tempo und 512 MB Speicher, aber
aufgrund meiner Nachfrage hat das netterweise jmd. getestet
auf seinem Rechner mit 256 MB Speicher nd auch weniger Tempo,
da dauerte das auch nur einen Wimpernschlag wie er schrieb.

Die xls habe ich dann noch bei mir mit XL97 getestet, gleiches
Verhalten, also schließe ich Excel als Bremse aus.
Irgendwie/irgendwas bremst mein WinXP aus.

Mir ist da gerade noch was eingefallen.
Prüfe mal den/sie Temp-Ordner auf allfällige .emf-Dateien und lösche diese falls vorahnen. Hier noch ein Link zum KB von MS:

http://support.microsoft.com/kb/299372

Da dieser Zeitverzug auch passiert wenn Excel als einziges von
mir gestartetes Programm läuft scheidet Firefox u.ä. auch aus.

Apropos, im Zuge der Recherche deshalb stiess ich hier in der
FAQ eines Windows-Brett auf Antispy,
http://www.xp-antispy.org/index.php/lang-de/download…
das half mir zwar auch nicht aber ich find das Klasse, teste
es mal wenn du magst.

Nein, lieber nicht - Damit kann man sich sein System wunderschön zerhacken und 'putt machen.

Das muß ja auch so sein, damit du Zeit hast dich darum zu
kümmern:

http://wer-weiss-was.de/app/service/board_navi?Artik…

*lächel*

Na, mal sehen, ich weiss nicht ob ich davon was verstehe… :wink:

Mit freundlichen Grüssen

Thomas Ramel
[Win XP Pro SP-2 / xl2003 SP-3]

Ja, so sehe die Traumlösung aus.

Ich öffne die mappe, und sehe sofort, die anzahl der blätter der anderen mappe.

der name der mappe kann ruhig im code stehen!
Das Problem ist leider nur - ich habe noch nie mit Makros gearbeitet - schon gar nicht mit der programmierung!

aber das ist pascal oder? das habe ich mal in der schule ein wenig gelernt.

Hi Phil,

Ich öffne die mappe, und sehe sofort, die anzahl der blätter
der anderen mappe.

der name der mappe kann ruhig im code stehen!

aber das ist pascal oder? das habe ich mal in der schule ein
wenig gelernt.

nein, das ist Basic. Genauer gesagt Visual Basic. Ab Excel2000 beruht Excel auf einer Teilmenge der Befehle von Visual Basic 6.0 plus einigen Vba-eigenen Befehlen.

Fast egal welche Programmiersprache du schon mal hattest, überall wird es Schleifen und Wenn-Abfragen geben, nur die Syntax ist dann anders.

Wenn du da die Grundlagen verstanden hast kannst du auch diesen Vba-Codeschnipsel deuten/lesen:

For N = 1 To 10
 if N= 5 then msgbox n
next N

So, jetzt zu deiner Anfrage, soll die Blattanzahl der anderen Mappe in einer Messagebox angezeigt werden oder in eine Zelle geschrieben werden?

Gruß
Reinhard

Ich geh mal tiefer ins Detail:

Ich bin beim Bund im Stab - Material-Abteilung und wir haben da eine Excel-Tabelle, die mehrere Blätter (Soldat 1, Soldat 2, …, Soldat n) enthält.
Darin sieht man, wann dieser Soldat auf welchem Lehrgang ist.
Die Mappe heißt dann z.b. PzBtl104.xls oder PzGrenBtl122.

Jetzt will ich in einer übergeordnetetn Mappe anzeigen, wieviel Soldaten des Panzer Batallions 104 auf Lehrgang sind.
Diese Mappe heißt dann z.b. Brigade und ich sehe dann von jedem Batallion in einer Spalte, wieviele Soldaten auf Lehrgang sind.

Hallo Phil,

da eine Excel-Tabelle, die mehrere Blätter (Soldat 1, Soldat
2, …, Soldat n) enthält.
Darin sieht man, wann dieser Soldat auf welchem Lehrgang ist.
Die Mappe heißt dann z.b. PzBtl104.xls oder PzGrenBtl122.

wodran erkennt man denn daß da Blatt1=soldat1 auf Lehrgang ist?
Steht das jeweis im Blatt oder existiert das Blatt nur wenn er auf Lehrgang ist?

Jetzt will ich in einer übergeordnetetn Mappe anzeigen,
wieviel Soldaten des Panzer Batallions 104 auf Lehrgang sind.
Diese Mappe heißt dann z.b. Brigade und ich sehe dann von
jedem Batallion in einer Spalte, wieviele Soldaten auf
Lehrgang sind.

Da würde sich anbieten, in der Hauptmappe schreibst du in eine Spalte alle Mappennamen die überprüft werden sollen.
Ein Makro kann dann alle diese Mappen öffnen, die Blätter auswerten und neben dem Mappennamen in einer Zelle anzeigen.

Dieses makro kann immer dann vollautomatisch balaufen wenn du die Hauptmappe öffnest oder in der Mappennamensliste was änderst.
Am besten das verzeichnis wo die anderen mappen alle stehen in der hauptmappe in eine Zelle schreiben.

Wäre das dann so wie gewünscht?

Gruß
Reinhard

ich kann da gar nicht selbst schreiben =)
Dieser Code schnipsel da oben funktioniert ja schon!
Das ist ja auch fast alles, nur muss das andere dokument dazu geöffnet sein und das ist nicht sinn der sache, da kann ich dann auch gleich selbst schauen, wenn ich es schon öffne.

Jenachdem wieviel blätter existieren, soviele soldaten sind auf lehrgang.
der zeitraum ist egal.
PzBtl104.xls hat 5 Blätter, also zeigt mir die brigade.xls an, dass 5 soldaten des PzBtl104 auf lehrgang sind.

Dann soll das ganze ja auch mehrfach ausführbar sein. sind ja mehrere dateien, in denen geschaut werden soll, wieviele soldaten auf lehrgang sind (da es auch mehrere - 7 - batallione sind)