3.6k Aufrufe
Gefragt in Tabellenkalkulation von fedjo Experte (2.2k Punkte)
Hallo,
Ich hätte da eine Frage zum Code von Excel 2007.

Unter Excel 2000 funtioniert der Code:
Private Sub ListBox4_Click()
Application.ScreenUpdating = False
Cells.Rows.EntireRow.Hidden = False
For Each Zelle In Range("D4:D" & Range("D65536").End(xlUp).Row)
If Zelle.Text <> ListBox4.Text Then
Zelle.Rows.EntireRow.Hidden = True
End If
Next
End Sub

Mit Excel 2007 wird hier ein Fehler angezeigt:
Cells.Rows.EntireRow.Hidden = False
Wie sollte der Code unter Excel 2007 verändert werden?

Gruß
fedjo

13 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Halo Fedjo,

rows ist sinnlos mit EntireRow. teilst Du ihm ja schon mit das es um Zeilen geht..
Cells.EntireRow.Hidden = False
in der anderen Zeile auch.

Gruß Hajo
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Fedjo,

was sagt denn die Fehlermeldung? Ich erhalte auch in 2007 keine Fehlermeldung.

Bis später,
Karin
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo Hajo, Karin,
danke für die schnellen Antwortnn.
@ Hajo
Wenn ich den Code ohne "rows" verwende, erhalte ich die Fehlermeldung: Die Hidden-Eigenschaft des Range-Objektes kann nicht festgelegt werden.

@Karin
Auch mit "rows" (Cells.Rows.EntireRow.Hidden = False) erhalte ich die gleiche Fehlermeldung.


Gruß
fedjo
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Fedjo,

ich hatte zuerst unter 2010 getestet und da bekam ich eine Fehlermeldung. Jetzt habe ich meinen virtuellen Rechner mit 2007 gestartet und da bekomme ich keinen Fehler. Ich habe nur den Code getestet der im Beitrag war mit folgenden veränderungen, da ich keine UserForm habe.
.

Option Explicit

Private Sub ListBox4_Click()
Dim Zelle As Range
Application.ScreenUpdating = False
Cells.EntireRow.Hidden = False
For Each Zelle In Range("D4:D" & Range("D65536").End(xlUp).Row)
' If Zelle.Text <> ListBox4.Text Then
Zelle.EntireRow.Hidden = True
' End If
Next
End Sub
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo fedjo,

die Tabelle ist nich zufälifg geschützt?

Gruß Hajo
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo Hajo,
die Tabelle ist mit ScrollArea geschützt, es gibt aber keine Probleme mit Excel 2000.

Worksheets("Allgemein").ScrollArea = "M4:M600"

Gruß
fedjo
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo fedja,

wie ich schon geschrieben hatte, wir sehen hier nur den Code im Beitrag. Nur wenige sehen die Datei. Ich sehe Sie nicht, da ich es ablehne über das Internet auf fremde Rechner zu schauen.

Gruß Hajo
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Fedjo,

ich hatte den Code urprünglich getestet ohne ListBox, und da läuft er ohne Fehler - auch in 2007. Jetzt habe ich mal eine ListBox eingebaut und erhalte den Fehler ebenfalls. Beim Testen des Codes im Einzelschrittmodus fällt folgendes auf: der Code wird 2 mal durchlaufen - zuerst bis zur Zeile für das Einblenden und dann wird sofort wieder zum Anfang der Prozedur gesprungen. Und beim 2. Durchlauf wird dann der Fehler ausgelöst - offensichtlich wird durch Excel in den fest eingetragenen ListFillRange eingegriffen und möglicherweise wird dadurch kurzzeitig der Entwurfsmodus eingeschaltet. In solchen Fällen vergisst Excel alle bereits benutzen Variablen - so auch die Excel-internen Cells, Rows usw., was dann zu dem Fehler führt.

Fazit: fülle deine ListBox nicht mittels Festlegung von ListFillRange, sondern entweder, indem du z.B. mit AddItem die Werte einzeln zuweist oder sie in ein Array als Zellbereich einliest und dann der List zuweist. Letzteres ginge z.B. mit folgendem Code im Codemodul des Tabellenblattes:
Option Explicit
Dim arrWerte

Private Sub ListBox4_Click()
Dim Zelle As Range
Application.ScreenUpdating = False
Cells.Rows.EntireRow.Hidden = False
For Each Zelle In Range("D4:D" & Range("D65536").End(xlUp).Row)
If Zelle.Text <> ListBox4.Text Then Zelle.Rows.EntireRow.Hidden = True
Next
End Sub

Private Sub ListBox4_GotFocus()
arrWerte = Worksheets("Tabelle2").Range("A1:A50")
ListBox1.List = arrWerte
End Sub

Den Wertebereich für das Array musst du natürlich an deine Gegebenheiten anpassen.


Noch ein Tipp: Die Verwendung von Range("D65536").End(xlUp).Row für das Ermitteln der letzten belegten Zeile ist bei Excel2007 nicht sinnvoll, da dort ja mehr Zeilen als 65536 existieren.

Bis später,
Karin
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo Karin,
danke für deine Mühen.
Ich konnte leider deine Anregungen nicht umsetzen, es liegt wohl am Aufbau der Tabelle oder an meinen Kenntnissen.
Vielleicht wäre der Autofilter eine Alternative zu der Hidden-Eigenschaft, der doch die Tabelle schneller aufbaut.
Es werden sicher noch mehr Fehler angezeigt, bei der Umstellung von Excel 2000 auf Excel 2007.

Ich möchte aber die Tabelle für Lagerverwaltung nicht ins Forum stellen, könnte sie dir aber zukommen lassen.

Gruß
fedjo
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Fedjo,

versuchen wir es doch erst einmal ohne Datei. In meinem Beispiel befinden sich die Daten die in der ListBox angezeigt (also zur Auswahl bereitgestellt) werden sollen, im Tabellenblatt Tabelle2, Bereich A1:A50, das Listenfeld befindet sich im Tabellenblatt Tabelle1. ListFillRange des Listenfeldes ist leer. Wie anders ist deine Arbeitsmappe aufgebaut? Wo befindet sich der Wertebereich den du als ListFillRange in die ListBox eingetragen hast? Woran hängt es beim Umsetzen auf deine Bedingungen?

Bis später,
Karin
...