Discussion:
Ausgeblendete Zeilen per VB einblenden
(zu alt für eine Antwort)
Carsten Bettermann
2007-07-27 13:37:44 UTC
Permalink
Hallo NG,

ich habe ein allgemeines Problem unter Excel:

Man lege sich eine leere Tabelle an und blende alle Zeilen ab Zeile 6 und
alle Spalten ab Spalte F aus.

Nun erstellt man ein Modul mit folgender Prozedur:
Sub test()
Rows("6:10").Select
Selection.EntireRow.Hidden = False
End Sub

Nun speichere ich mir die Datei ab.

Startet man nun diese Prozedur erhält man eine Fehlermeldung:
Laufzeitfehler '-2147417848 (80010108)':
Die Methode 'Hidden' für das Objekt 'Range' ist fehlgeschlagen

Danach kann ich mit der Maus keine Zelle mehr markieren und auch Excel
nicht mehr einfach beenden. Dies funktioniert nur noch über den
Taskmanager.

Öffne ich nun die gespeicherte Datei und starte die Prozedur erneut, werden
die Zeilen 6 bis 10 sichtbar.

Trotz allem kommt diese Fehlermeldung sporadisch und löst vor allem in
einem komplexen Ablauf von Funktionen massivste Probleme aus.

Ich habe das Ganze sowohl unter Excel2000 als auch unter Excel2007 getestet
und auch an verschiedenen Rechnern immer das gleiche Problem.

Hat jemand einen Tip, wie ich das anders lösen kann oder warum diese
Fehlermeldung manchmal erscheint?

Wäre prima, den momentan hänge ich dort ziemlich in der Luft.

Danke und Gruß Carsten
Alexander Wolff
2007-07-27 13:51:36 UTC
Permalink
Schnellschuß: Vielleicht zu erweitern auf:

If Selection.EntireRow.Hidden = True Then Selection.EntireRow.Hidden = False

Unerwarteterweise scheint es vielleicht an der erneuten gleichen Zuweisung
des Hiddenwerts zu liegen, was schon ein Bug wäre.

Anmerkung: Selection/Select bei ernsthafter Programmierung vermeiden! Hat
aber nichts mit Deinem Fehler zu tun.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
Wolfgang Habernoll
2007-07-29 09:48:15 UTC
Permalink
Hallo Carsten
Post by Carsten Bettermann
Hallo NG,
Man lege sich eine leere Tabelle an und blende alle Zeilen ab Zeile 6 und
alle Spalten ab Spalte F aus.
Sub test()
Rows("6:10").Select
Selection.EntireRow.Hidden = False
End Sub
Nun speichere ich mir die Datei ab.
Die Methode 'Hidden' für das Objekt 'Range' ist fehlgeschlagen
Danach kann ich mit der Maus keine Zelle mehr markieren und auch Excel
nicht mehr einfach beenden. Dies funktioniert nur noch über den
Taskmanager.
Öffne ich nun die gespeicherte Datei und starte die Prozedur erneut, werden
die Zeilen 6 bis 10 sichtbar.
Trotz allem kommt diese Fehlermeldung sporadisch und löst vor allem in
einem komplexen Ablauf von Funktionen massivste Probleme aus.
Ich habe das Ganze sowohl unter Excel2000 als auch unter Excel2007 getestet
und auch an verschiedenen Rechnern immer das gleiche Problem.
Hat jemand einen Tip, wie ich das anders lösen kann oder warum diese
Fehlermeldung manchmal erscheint?
Wäre prima, den momentan hänge ich dort ziemlich in der Luft.
ich kann den Fehler nicht nachvollziehen, aber da du den Code in einem Modul
hast mußt du schon des gewünschte Tabellenblatt genau referenzieren. Auf
Select kannst du auch verzichten. Versuche es mal so ob es dann klappt.

Sub test()
Worksheets("Tabelle1").Rows("6:10").EntireRow.Hidden = False
End Sub
Carsten Bettermann
2007-07-30 07:16:58 UTC
Permalink
Hallo Ihr Zwei,

also auch unter Auslassen von Select/Selection, bleiben die Fehler die
Gleichen.

Wenn ich mit

varInfo = ActiveWorkbook.ActiveSheet.Rows("6:10").EntireRow.Hidden

abfrage erhalte ich bereits die Fehlermeldung:
Laufzeitfehler: '1004':
Die Hidden-Eigenschaft des Range-Objektes kann nicht zugeordnet werden.

@Wolfgang: Was meinst Du damit, dass Du den Fehler nicht nachvollziehen
kannst? Ich habe übers Wochenende dies dann auch noch mit Excel2003
versucht und auch dort das gleiche Phänomen.

Ich habe nun an insgesamt acht Rechnern mit verschiedenen Office-Versionen
das Gleiche.

Mir erscheint das doch extrem komisch.

Habt Ihr noch eine Idee??

Danke und Gruß Carsten
Wolfgang Habernoll
2007-07-30 08:36:07 UTC
Permalink
Hallo Carsten
Post by Carsten Bettermann
Hallo Ihr Zwei,
also auch unter Auslassen von Select/Selection, bleiben die Fehler die
Gleichen.
Wenn ich mit
varInfo = ActiveWorkbook.ActiveSheet.Rows("6:10").EntireRow.Hidden
Die Hidden-Eigenschaft des Range-Objektes kann nicht zugeordnet werden.
@Wolfgang: Was meinst Du damit, dass Du den Fehler nicht nachvollziehen
kannst? Ich habe übers Wochenende dies dann auch noch mit Excel2003
versucht und auch dort das gleiche Phänomen.
Ich habe die Schritte in deinem OP nachvollzogen und und es funktioniert wie
gewollt. Auch deinen neuen Laufzeitfehler '1004' bekomme ich nicht.
Post by Carsten Bettermann
Ich habe nun an insgesamt acht Rechnern mit verschiedenen Office-Versionen
das Gleiche.
blöde Frage, hast du es immer mit der selben Mappe gemacht oder die Schritte
in einer neuen Mappe nachvollzogen. Falls nicht soltest du das mal probieren
um eine fehlerhafte Mappe auszuschließen.
Post by Carsten Bettermann
Mir erscheint das doch extrem komisch.
ja, mir auch, es sollte eigentlich klappen.
Post by Carsten Bettermann
Habt Ihr noch eine Idee??
ja, schau mal nach ob du den Blattschutz drin hast
--
mfG
Wolfgang Habernoll

[ Win XP Home SP-2 , XL2002 ]
Carsten Bettermann
2007-07-30 09:10:54 UTC
Permalink
Hallo Wolfgang,

es ist immer eine neue Mappe, sonst habe ich den Fehler auch nicht,
zumindest nicht immer.

Also nochmal step-by-step:

1. Excel öffnen
2. Klicke mit links, links auf "6" und dann auf STRG+SHIFT+<Pfeil nach
unten>
3. Rechtsklick auf "6" dann mit links auf "Ausblenden"
4. Klicke mit links, oben auf "F" und dann auf STRG+SHIFT+<Pfeil nach
rechts>
5. Rechtsklick auf "F" dann mit links auf "Ausblenden"
6. Tastenkombination STRG+<F11>
7. Im VB-Editor mit rechts auf "VBAProjekt (Mappe1)" dann auf "Einfügen"
fahren und mit linksm auf "Modul" klicken.
8. Folgenden Text einfügen:

Sub Test()
Dim varInfo As Boolean
varInfo = ActiveWorkbook.ActiveSheet.Rows("6:10").EntireRow.Hidden
MsgBox varInfo
ActiveWorkbook.ActiveSheet.Rows("6:10").EntireRow.Hidden = False
End Sub

9. Starte das Modul mit <F5>

Jetzt erhälst du eine Message mit "Wahr" und wenn Du nun auf "OK" klickst,
dann bekommst du folgenden Fehlermeldung:
Laufzeitfehler '-2147417848 (80010108)':
Die Methode 'Hidden' für das Objekt 'Range' ist fehlgeschlagen

10. Klicke in der Fehlermeldung auf "Beenden"
11. Starte das Modul erneut mit <F5>

Jetzt erhälst Du keine Message mehr sondern gleichen einen Fehler, nämlich:
Laufzeitfehler: '1004':
Die Hidden-Eigenschaft des Range-Objektes kann nicht zugeordnet werden.

12. Speichere die Mappe als "test.xls" auf Deinem Rechner
13. Versuche mit der Maus irgendeine Zelle zu markieren (Es geht nicht)
14. Schließe Excel (Das geht auch nicht mehr, Du mußt nun den Taskmanager
benutzen)
15. Öffne die Datei "test.xls"
16. Tastenkombination ALT+<F11>
17. Klicke in das Modul "Modul1"
18. Starte das Modul mit <F5>

Nun erhälst Du wieder die Message "Wahr" und nach Klick auf "OK" werden die
Zeilen 6 - 10 eingeblendet und kannst ganz normal weitermachen.

Nicht falsch verstehen, wenn ich hier eine Erklärung für Dummies
reinschreibe, aber der Fehler erscheint wie Du merkst nur bei gerade
angelegten Mappen. Nach dem Speichern ist er erstmal weg. Er kommt
allerdings wenn Du Dich im Verlauf des Codes in den Zellen bewegst
irgendwann wieder und demoliert mir dadurch die ganze Tabelle.

Ich hoffe, Du kannst es jetzt nachvollziehen, ansonsten weiss ich auch
nicht weiter. Ich habe wirklich am Wochenende bei einem Freund an dessen
Rechner das auch nochmal versucht und hatte das gleiche Phänomen. Dann
müßten wir hier andere Excel-Versionen haben ;-)

Danke und Gruß Carsten
Wolfgang Habernoll
2007-07-30 10:44:51 UTC
Permalink
Hallo Carsten
Post by Carsten Bettermann
Hallo Wolfgang,
es ist immer eine neue Mappe, sonst habe ich den Fehler auch nicht,
zumindest nicht immer.
Wenn ich nun dein Beispiel nachstelle klappt es auch nicht, ich erhalte
genau deine Fehler. Veruche mal zuerst *nur* die letzet Zeile auszublenden,
dann mache wie beschrieben weiter.
Post by Carsten Bettermann
1. Excel öffnen
1a. In Spalte A mit SHIFT+<Pfeil nach unten> zur letzen Zeile gehen
1b. mit STRG+SHIFT+<Pfeil nach rechts> lezte Zeile markieren und dann mit
linksklick "Ausblenden"

nun weite wie bisher
Post by Carsten Bettermann
2. Klicke mit links, links auf "6" und dann auf STRG+SHIFT+<Pfeil nach
unten>
3. Rechtsklick auf "6" dann mit links auf "Ausblenden"
4. Klicke mit links, oben auf "F" und dann auf STRG+SHIFT+<Pfeil nach
SNIP
Nicht falsch verstehen, wenn ich hier eine Erklärung für Dummies
reinschreibe, aber der Fehler erscheint wie Du merkst nur bei gerade
das ist OK ..so kann man das schnell und genau nachstellen. Wie gesagt, bei
mir klappt der Workaround, warum kann ich nicht genau sagen aber XL
"verschluckt" sich wohl mit einem Bereich bis zur letzen Zeile zumal es ja
auch geht wenn man nur bis zu vorletzten Zeile geht.
--
mfG
Wolfgang Habernoll

[ Win XP Home SP-2 , XL2002 ]
Carsten Bettermann
2007-07-30 11:13:07 UTC
Permalink
Hallo Wolfgang,

na zum Glück, sonst würde ich jetzt an meinem Verstand zweifeln. Trotzdem
kann ich Deinen Gedanken jetzt gerade nicht folgen.
Post by Wolfgang Habernoll
Post by Carsten Bettermann
1. Excel öffnen
1a. In Spalte A mit SHIFT+<Pfeil nach unten> zur letzen Zeile gehen
1b. mit STRG+SHIFT+<Pfeil nach rechts> lezte Zeile markieren und dann mit
linksklick "Ausblenden"
???
Post by Wolfgang Habernoll
nun weite wie bisher
[...]
Post by Wolfgang Habernoll
Wie gesagt, bei
mir klappt der Workaround, warum kann ich nicht genau sagen aber XL
"verschluckt" sich wohl mit einem Bereich bis zur letzen Zeile zumal es ja
auch geht wenn man nur bis zu vorletzten Zeile geht.
???

Also mein Problem ist, dass ich tatsächlich eine Mappe habe, bei der die
Arbeitsblätter nur soweit sichtbar sind, wie Sie tatsächlich gefüllt sind.
Die Anwender füllen die Arbeitsblätter ausschliesslich über Formulare. Für
jeden Datensatz wird nun eine Zeile sichtbar gemacht und ausgefüllt (In
Wirklichkeit steht da schon ein Riesencode mit 30 verschiedenen Formularen
dahinter). Es muss also wirklich alles nach unten ausgeblendet sein.

Aber wenn ich Dich richtig verstehe handelt es sich dabei um einen Bug bei
MS und ich habe wohl gar keine Chance das vernünftig zum Laufen zu bekommen
:-(

Gruß Carsten
Wolfgang Habernoll
2007-07-30 13:25:02 UTC
Permalink
Hallo Carsten
Post by Carsten Bettermann
Hallo Wolfgang,
na zum Glück, sonst würde ich jetzt an meinem Verstand zweifeln. Trotzdem
kann ich Deinen Gedanken jetzt gerade nicht folgen.
sorry für die umständliche Beschreibung, aber eigentlich ganz simpel. Blende
zuerst *nur die letzte Zeile* (65536) aus, dann mach genau das was du im
letztem Posting so exakt beschrieben hast. Die Fehler treten so zumindest
nicht mehr auf und XL kannst du normal beenden. Würde mich freuen wenn du
zumindest das bestätigen könntest, wie es dann in deinem ganzen Projekt
läuft ist eine andere Sache.
--
mfG
Wolfgang Habernoll

[ Win XP Home SP-2 , XL2002 ]
Carsten Bettermann
2007-07-30 15:02:50 UTC
Permalink
Hallo Wolfgang,

prima, jetzt habe ich es verstanden und konnte es auch fehlerfrei
nachvollziehen. Jetzt bleibt mir nur noch die Frage, wie ich die
mittlerweile 180 Mappen mit jeweils 14 Blättern überarbeiten soll.
Per Code funktioniert das ja nicht, weil eben aus bekanntem Problem.

Somit meine letzte Frage, gibt es dafür auch eine Idee? ;-)

Danke und Gruß Carsten
Carsten Bettermann
2007-08-01 11:35:21 UTC
Permalink
Hallo Wolfgang,

ich habe mit dieser ganzen Sache jetzt ein wenig herumprobiert und habe mir
eine Konvertierungsroutine geschrieben, die das ganze Problem behebt.

Dadurch ist nun aber ein ganz anderes Problem entstanden. Die Dateien
werden nun ca. 20 MB groß (vorher 300 KB).

Ich habe das von Hand versucht nachzustellen und da ist es das Gleiche.
Sobald ich die Zeile 65536 für sich ausblende wird eine Datei mit 14
Blättern 20 MB groß und ich kann nichts dagegen tun. Auch das
Althergebrachte mit "leere Zeilen löschen" hilft nichts.

Das kann doch einfach nicht sein.

Ich weiß, es klingt naiv, aber kann MS für dieses Problem nicht einen Patch
schreiben? Schließlich setzt sich das Ganze ja durch alle Versionen durch.
Wo kann man sich denn da hinwenden?

Ich bin echt am Verzweifeln.

Gruß Carsten
Wolfgang Habernoll
2007-08-02 09:00:58 UTC
Permalink
Halo Carsten
Post by Carsten Bettermann
Hallo Wolfgang,
ich habe mit dieser ganzen Sache jetzt ein wenig herumprobiert und habe mir
eine Konvertierungsroutine geschrieben, die das ganze Problem behebt.
Dadurch ist nun aber ein ganz anderes Problem entstanden. Die Dateien
werden nun ca. 20 MB groß (vorher 300 KB).
Ich habe das von Hand versucht nachzustellen und da ist es das Gleiche.
Sobald ich die Zeile 65536 für sich ausblende wird eine Datei mit 14
Blättern 20 MB groß und ich kann nichts dagegen tun. Auch das
Althergebrachte mit "leere Zeilen löschen" hilft nichts.
Das kann doch einfach nicht sein.
Ich weiß, es klingt naiv, aber kann MS für dieses Problem nicht einen Patch
schreiben? Schließlich setzt sich das Ganze ja durch alle Versionen durch.
Wo kann man sich denn da hinwenden?
Ich bin echt am Verzweifeln.
das scheint wirklich ein Bug zu sein, woran es liegt weiß ich leider nicht.
Ich habe auch unter

http://www.xlam.ch/
http://support.microsoft.com/ph/918/

nichts gefunden. Du könntest dich ja auch dort direkt an MS ( ? Link rechts
oben ) wenden oder du stellt die Frage hier noch einmal in einem neuem
Thread, ich denke hier liest keiner mehr mit, und es gibt in der Gruppe
wirkliche Experten.

Tja...kurz gesagt warum hängt sich Excel auf wenn man

- ab z.B 6 alle Zeilen bis Ende ausblendet
- versucht dann mit
ActiveWorkbook.ActiveSheet.Rows("6:10").EntireRow.Hidden = False
ein paar Zeilen einzublenden und erhält dann

Laufzeitfehler '-2147417848 (80010108)': mit Text
Die Methode 'Hidden' für das Objekt 'Range' ist fehlgeschlagen

oder auch mal mit dem Text
Automatisierungsfehler
Das aufgerufene Objekt wurde von den Clints getrennt

- danach kann man XL nur noch im Taskmanager beenden

hallo NG, Experten und MPV's falls doch einer mitgelesen hat ...
--
mfG
Wolfgang Habernoll

[ Win XP Home SP-2 , XL2002 ]
Carsten Bettermann
2007-08-03 10:21:23 UTC
Permalink
Hallo Wolfgang, hallo NG,

das Problem ist gelöst, ich habe einen entscheidenden Tip bekommen und das
Eis gebrochen.

Stellt man sich die Frage, was .Hidden=True bewirkt, dann wird man
feststellen, dass es sich hierbeit lediglich um ein .RowHeight=0 handelt.

Ein kurzes Testmakro für eine leere Datei:

Sub test()
With ActiveWorkbook.ActiveSheet.Rows("5")
.RowHeight = 0
MsgBox "Zeilenhöhe: " & .RowHeight & vbCrLf & _
"Ausgeblendet? " & .Hidden
.RowHeight = 12.75
MsgBox "Zeilenhöhe: " & .RowHeight & vbCrLf & _
"Ausgeblendet? " & .Hidden
End With
End Sub

Hier sieht man, dass sobald eine Zeile in der Höhe 0 hat, sie die
Eigenschaft .Hidden=True erhält.

Somit können wir in unserem Makro anstelle von .Hidden=True einfach
.Rowheight=0 verwenden.

Zum wieder Einblenden funktioniert dann .Hidden=False, wobei ich
sicherheitshalber auf .RowHeight=15 (für Excel2007) bzw. 12.75 (für alle
Vorgängerversionen jeweils mit Standardschriftgröße) ausweichen würde, da
verschiebt man im sichtbaren Bereich Zeilen kann das Problem wieder
auftauchen. Somit kommen wir dann zu dem einzigen Problem, das dieser
Workaraund mit sich bringt. Sollten sich in der Tabelle im ausgeblendeten
Bereich Daten befinden, so sollte man wissen, welche eigentlich Zeilenhöhe
diese haben und dort explizit einen Wert zuweisen. Eine interne Variable,
die sich die Ursprungsgrösse merkt (.rowheight=xlautomatic) habe ich nicht
gefunden, was nicht heissen soll, dass es diese nicht gibt. Vielleicht hat
ja hier noch jemand eine Idee.

Schöne Grüße aus der Pfalz
Carsten

Loading...