online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon fedjo vom 07.08.2022, 14:59 Options

Lösung

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

Lö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

Ähnliche Themen

Excel 2007
kati2  04.04.2009 - 314 Hits - 7 Antworten

Excel 2007 Änderungen in Excel-Optionen speichern
kati2  27.01.2010 - 345 Hits - 5 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 07:32:25 2026