Excel 2007
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
Antwort schreiben
Antwort 1 von Hajo_Zi vom 07.08.2022, 15:35 Options
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
Antwort 2 von Beverly vom 07.08.2022, 15:38 Options
Hi Fedjo,
was sagt denn die Fehlermeldung? Ich erhalte auch in 2007 keine Fehlermeldung.
Bis später,
Karin
Antwort 3 von fedjo vom 07.08.2022, 16:30 Options
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
Antwort 4 von Hajo_Zi vom 07.08.2022, 16:35 Options
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
Antwort 5 von Hajo_Zi vom 07.08.2022, 16:36 Options
Hallo fedjo,
die Tabelle ist nich zufälifg geschützt?
Gruß Hajo
Antwort 6 von fedjo vom 07.08.2022, 16:44 Options
Hallo Hajo,
die Tabelle ist mit ScrollArea geschützt, es gibt aber keine Probleme mit Excel 2000.
Worksheets("Allgemein").ScrollArea = "M4:M600"
Gruß
fedjo
Antwort 7 von Hajo_Zi vom 07.08.2022, 16:48 Options
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
Antwort 8 von Beverly vom 07.08.2022, 19:16 Options
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
Antwort 9 von fedjo vom 08.08.2022, 12:45 Options
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
Antwort 10 von Beverly vom 08.08.2022, 13:31 Options
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
Antwort 11 von fedjo vom 08.08.2022, 16:26 Options
Hallo Karin,
die ListBox (Steuerelemente) befindet sich in einer UserForm.
Die ListBox wird unter Eigenschaften RowSource D4:D168 gefüllt,
Gruß
fedjo
Antwort 12 von Beverly vom 09.08.2022, 09:10 OptionsLösung
Hi Fedjo,
das ist der Nachteil, wenn man die Aufgabenstellung nicht vollständig beschreibt - ich bin von einer ListBox im Tabellenblatt und nicht in einem UserForm ausgegangen.
Lösche den fest eingetragenen Bereich aus RowSource. Schreibe den 2. Codeteil in das Activate Ereignis des UserForms und nicht in das GotFocus Ereignis der ListBox (Wertebereich außerdem natürlich anpassen).
Bis später,
Karin
Antwort 13 von fedjo vom 09.08.2022, 17:55 Options
Hallo Karin,
es war mir bei der Aufgabenstellung nicht ganz klar welche Angaben dazu benötigt werden.
Aber es funktioniert jetzt mit deiner Hilfe unter Excel 2007 genauso wie ich mir es vorgestellt habe.
Danke für deine Unterstützung.
Gruß
fedjo