Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1904to1908
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Code funktioniert nicht bei Zahl

Code funktioniert nicht bei Zahl
25.10.2022 08:40:56
Henry
Hallo liebes Forum,
ich habe eine ComboBox4, die beim Change Ereignis den ausgewählten Wert an einen "Namen" in der Excel Tabelle übergeben soll.
Anschließend soll die ListBox1 nach dem Wert, der in der ComboBox4 ausgewählt wurde, gefiltert werden.
Es klappt mit allen ComboBoxen in der Userform wunderbar, solange nach Text gefiltert wird.
Sobald aber nach einer Zahl gefiltert werden soll, hier zum Beispiel das Jahr 2022, tut sich nichts.
Der Name in der Excel Tabelle nimmt nicht den neuen Wert an.
Ich habe bereits versucht die Zahlen in der Excel Tabelle als Text zu formatieren.
Leider bringt das auch nichts.
Kann mir jemand sagen was an meinem Code falsch ist?
Mein Code sieht wie folgt aus:

Private Sub ComboBox4_Change()
Dim X As Long, bln As Boolean
ThisWorkbook.Names("sortierenjahr").RefersToR1C1 = "=""" & ComboBox4.Value & """"
With Sheets("Tabelle1").Range("A1").CurrentRegion
With .Offset(1, 0).Resize(.Rows.Count - 1)
.Sort Key1:=.Cells(1, 13), Order1:=xlAscending, Header:=xlNo
X = WorksheetFunction.Sum(.Columns(13))
If X = 0 Then X = .Rows.Count
ListBox1.RowSource = Sheets("Tabelle1").Cells(2, 1).Resize(X, 12).Address(external:=True)
End With
End With
ThisWorkbook.Names("sortierenjahr").RefersTo = "="
End Sub

34
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code funktioniert nicht bei Zahl
25.10.2022 09:06:41
MCO
Moin, Henry.
Wenn ich lese "sortierenjahr" drängt sich bei mir der Verdacht nach Datumsformat auf.
Ohne Beispieltabelle kann man in die Richtung aber nicht suchen und auch den Code nicht nachvollziehen.
Daher: Frage offen, brauchen mehr Details....
Gruß, MCO
AW: Code funktioniert nicht bei Zahl
25.10.2022 09:11:46
Henry
Hallo MCO,
ich habe mal meine Tabelle beigefügt:
https://www.herber.de/bbs/user/155828.xlsm
Hier sieht man dass das Filtern der ComboBoxen 1-3 funktioniert.
Die ComboBoxen 4 und 5 funktionieren leider nicht.
Gruß
Henry
AW: Code funktioniert nicht bei Zahl
25.10.2022 09:51:41
Daniel
HI
Excel unterscheidet beim Vergleich mit "=" streng zwischen Text und Zahl. Die Zahl 123 ist nicht das gleiche wie der Text "123".
Wenn in deinen Zellen also Zahlen stehen, musst du also auch den Namen mit Zahlen befüllen und nicht mit Texten.
Dh für die Comboboxen 4 + 5 müssen bei der Namenszuweisung die Anführungszeichen weg: .FormulaR1C1 = "=" & Combobox4.Value
andere Möglichkeit, du belässt bei Text in der Namenszuweisung (also mit Anführungszeichen) und wandelst in der Formel die Zahlen in Text, womit die Werte dann wieder vergleichbar werden:

...WENN(D3&""=sortierenjahr;1;
Gruß Daniel
Anzeige
AW: Code funktioniert nicht bei Zahl
25.10.2022 09:59:24
Henry
Hallo Daniel,
das klappt perfekt.
Vielen, vielen Dank.
Ich hatte weiter unten noch einen Thread aufgemacht, wo ich Hilfestellung beim Filtern brauchte.
Leider konnte mir keiner helfen.
Und zwar würde ich in der Userform gerne nach Abhängigkeiten filtern.
Wenn ich zum Beispiel in ComboBox1 einen Wert auswähle und in ComboBox4 einen Wert auswähle, dann soll in der ListBox die Kombination aus den beiden Filtern angezeigt werden.
Hast du vielleicht eine Idee wie ich das umsetzen könnte? :-)
AW: Code funktioniert nicht bei Zahl
25.10.2022 10:10:46
Daniel
Hi
Addiere in der Formel Vergleichsergebnisse:
=(E2=Sortiernalias)+(F2=sortierenvorname)+(...)
die WAHR werden in dieser Addtion wie 1 und und die FALSCH wie 0 verwendet.
dh in der Zeile, in der die meisten Comboboxauswahlen zutreffen, hast du dann auch den höchsten Wert.
dh du sortierst die Liste nach der Spalte M absteigend und ermittelst dann, wie oft der Wert aus der obersten Zelle vorkommt.
das kannst du dann als Resize für deine Ermittlung der Rowsource verwenden.
generell wäre hier aber die Frage, warum du dir aufwendig die Userform programmierst, wenn du das Ganze auch direkt in der Tabelle mit dem Autofilter machen kannst.
Spätstenens wenn du abhängige Comboboxen haben willst (dh nach Auswahl Jahr sollen in der Combobox Monat nur die Monate angezeigt werden, die auch im gewählten Jahr vorkommen) wirds aufwendig und der vorhandene Autofilter bietet dir das alles schon, ohne dass du was tun musst.
Gruß Daniel
Anzeige
AW: Code funktioniert nicht bei Zahl
25.10.2022 10:27:22
Henry
Hallo Daniel,
meinst du dass ich die Formel so in die Spalte schreiben soll?
=(E2=sortierenalias)+(F2=sortierenvorname)+(G2=sortierennachname)+(D2=sortierenjahr) +(C2=sortierenmonat)
Oder muss ich den Code auch noch anpassen?
Wenn ich nur die Formel einfüge, dann kommen irgendwie falsche Ergebnisse in der ListBox.
Oder habe ich da etwas falsch verstanden?
Du hast Recht, im Idealfall wäre es so, dass wenn ich in der ComboBox1 einen Wert auswähle, in der ComboBox2 nur noch die Werte stehen die für ComboBox1 zu treffen.
Aber ich habe keine Ahnung wie man das umsetzen kann.
Gruß
Henry
Anzeige
AW: Code funktioniert nicht bei Zahl
25.10.2022 10:35:18
Daniel
wenn du meinen Beitrag nicht sofort verstehst, darfst du ihn auch ein zweites oder drittes mal lesen.
eigentlich habe ich dir alles schon beantwortet, was du jetzt fragst.
AW: Code funktioniert nicht bei Zahl
25.10.2022 10:40:16
Henry
Hallo Daniel,
ich habe anscheinend nicht alles verstanden, was du geschrieben hast.
Auch nach mehrmaligem Durchlesen.
Ich habe die Formel ergänzt und die Spalte absteigend sortiert.
Leider weiß ich nicht was ich nun noch machen muss.
VG
Henry
AW: Code funktioniert nicht bei Zahl
25.10.2022 10:48:09
Daniel
wenn du absteigend sortiert hast, ermittelst du den Wert, der in er erste Zelle unter der Überschrift steht (also in Zelle M2)
dann zählst du, wie oft dieser Wert in der Liste vorkommt (bisher hast du mit Worksheetfunction.Sum die Summe gebildet, jetzt musst du mit Worksheetfunction.Countif zählen, wie oft der Wert aus zelle m2 in der Spalte vorkommt) und damit den Zellbereich für die RowSource bestimmen.
Hast du doch alles schon gemacht und programmiert, du musst es nur entsprechend anpassen.
Gruß Daniel
Anzeige
AW: Code funktioniert nicht bei Zahl
25.10.2022 12:19:44
Henry
Hallo Daniel,
es tut mir leid.
ich stehe auf dem Schlauch.
Wenn ich die Tabelle absteigend sortiere und dann einen Wert in der ComboBox auswähle sortiert sich die Liste direkt wieder aufsteigend.
Außerdem weiß ich nicht wie ich CountIf unterbringen soll.
Ich habe es wie folgt versucht.
Aber so klappt es nicht.
X = WorksheetFunction.CountIf(.Columns(13))
Entschuldige bitte, dass ich nochmal nachfragen muss.
Gruß
Henry
AW: Code funktioniert nicht bei Zahl
25.10.2022 14:15:51
Daniel
naja, Excel gut?
Count if ist zählen wenn und beim ZählenWenn musst du ja nicht nur angeben, wo gezählt werden soll, sondern auch was.
aber das hatte ich alles schon geschrieben.
wenn du weiter hilfe von mir haben willst, würde ich dich aber erst bitten mal zu prüfen, ob du nicht besser auf die userform verzichtest und direkt im Tabellenblatt mit dem Autofilter arbeitest.
der kann eigentlich genau das, was du hier erreichen willst und du hast das schon, ohne dass du da was programmieren musst.
Anzeige
AW: Code funktioniert nicht bei Zahl
25.10.2022 14:27:08
Henry
Hallo Daniel,
ich würde es gerne mithilfe einer Userform lösen, da in der Userform später auch noch in Textfeldern andere Daten eingegeben werden sollen.
Das klappt auch alles wunderbar.
Ich hatte das CountIf nun so verstanden:
X = WorksheetFunction.CountIf(.Columns(13), Range("M2"))
Aber es wird leider nicht richtig gefiltert.
Auch das Sortieren Absteigend klappt nicht.
Wenn ich die Tabelle mithilfe der Sortier-Option direkt im Tabellenblatt filtere, dann bleibt die Sortierung nicht erhalten.
VG Henry
AW: Code funktioniert nicht bei Zahl
25.10.2022 14:29:02
Daniel
zeig mal deine programmierung
ich bin kein Hellseher.
Anzeige
AW: Code funktioniert nicht bei Zahl
25.10.2022 14:33:30
Henry
Hallo Daniel,
mein Code für die ComboBox1 sieht wie folgt aus:

Private Sub ComboBox1_Change()
Dim X As Long, bln As Boolean
ThisWorkbook.Names("sortierenalias").RefersToR1C1 = "=""" & ComboBox1.Value & """"
With Sheets("Tabelle1").Range("A1").CurrentRegion
With .Offset(1, 0).Resize(.Rows.Count - 1)
.Sort Key1:=.Cells(1, 13), Order1:=xlAscending, Header:=xlNo
X = WorksheetFunction.CountIf(.Columns(13), Range("M2"))
If X = 0 Then X = .Rows.Count
ListBox1.RowSource = Sheets("Tabelle1").Cells(2, 1).Resize(X, 12).Address(external:=True)
End With
End With
ThisWorkbook.Names("sortierenalias").RefersTo = "="
End Sub

Anzeige
AW: Code funktioniert nicht bei Zahl
25.10.2022 14:53:51
Daniel
hast du dir das mal angeschaut?
was fällt dir auf?
Gruß Daniel
AW: Code funktioniert nicht bei Zahl
25.10.2022 15:21:55
Henry
Hallo Daniel,
ich habe die Order1 nun auf xlDescending geändert.
Außerdem habe ich diese Zeile herausgenommen:
ThisWorkbook.Names("sortierenalias").RefersTo = "="
Es klappt nun ansatzweise beziehungsweise immer nur beim ersten Mal.
Ich muss erst immer im Namensmanager "bezieht sich auf" ändern in ="=", dann kann ich in der Userform korrekt filtern.
Aber auch nur wenn ich das für ein Szenario durchspiele.
Sobald ich das zweite Mal etwas bei zum Beispiel ComboBox1 ändere, gerät die ListBox durcheinander.
Ich habe den aktuellen Stand nochmal hochgeladen:
https://www.herber.de/bbs/user/155854.xlsm
Anzeige
AW: Code funktioniert nicht bei Zahl
25.10.2022 15:40:20
Daniel
Hi
was du von Hand machst, kannst du dir auch vom Makro erledigen lassen.
du könntest die Namen beispielsweise beim Öffnen der Userform zurücksetzen, dh im Initialize-Event. Dann würden sie auch mit den Comboboxeinstellungen übereinstimmen. Oder im Terminate-Event der Userform beim Beenden.
ein Fehler steckt aber noch im System.
der Maximalwert der durch die Formel ermittelt wird, muss ja nicht zwingend mit der Anzahl der von dir bestimmten Auswahlkriterien übereinstimmen.
statt also den nach der sortierung oben stehenden Maximalwert in Spalte M zu verwenden, solltet du zählen, in wieviel deiner Comboboxen du eine Auswahl getroffen hast (kannst du ermitteln, mit ComboboxX.Value &lt&gt "" oder ComboboxX.ListIndex &gt -1
Gruß Daniel
Anzeige
AW: Code funktioniert nicht bei Zahl
25.10.2022 15:51:11
Henry
Hallo Daniel,
vielen Dank für deine Nachricht.
Ich bin mir nicht ganz sicher, ob ich das richtig verstanden habe.
Muss ich die Zeile mit CountIf nun wie folgt abändern?
X = WorksheetFunction.CountIf(.Columns(13), ComboBox1.ListIndex "größer" -1)
Wenn ich das so mache zeigt er mir beim Filtern alle Werte in der ListBox an.
Aber "erstaunlicherweise" den gefilterten Wert immer ganz oben.
Gruß
Henry
AW: Code funktioniert nicht bei Zahl
25.10.2022 16:42:56
Daniel
Hi
naja der Zahlenwert, nach dem du suchen musst wäre:

-((Combobox1.ListIndex > -1) + Combobox2.ListIndex > -1) + (Combobox3.ListIndex > -1) + usw für alle Comboboxen )
(das - weil in VBA ein WAHR nicht 1 sondern -1 entspricht)
das ist die Anzahl der Comboboxen, in denen du einen Wert ausgewählt hast und angezeigt werden sollen ja alle Zeilen, in denen jede von dir ausgewählte Bedingung erfüllt ist, also muss die Summe in der Formel so groß sein, wie die Anzahl der befülltn Comboboxen, damit die Zeile in die Listbox übernommen wird.
Gruß Daniel
AW: Code funktioniert nicht bei Zahl
25.10.2022 17:10:58
Henry
Hallo Daniel,
vielen lieben Dank für deine Geduld.
Es klappt jetzt einwandfrei. :-)
Das einzige was noch super wäre, ist, wenn man in ComboBox1 einen Wert auswählt und in der Datenbank gibt es kein zugehöriges Jahr 2023 für diesen Wert, dass in der ComboBox4 für das Jahr nur 2022 zur Auswahl steht.
Aber ich denke das ist zu kompliziert das umzusetzen, oder?
VG
Henry
AW: Code funktioniert nicht bei Zahl
25.10.2022 17:26:09
Daniel
kompliziert nicht, aber etwas aufwendig.
wenn man solche abhängigen Comboboxen haben willst, solltest du die Befüllung der Comboboxen nicht beim Start der Userform im Initialize-Event machen, sondern erst dann, wenn der Anwender auch die Liste aufklappt, denn dann kannst du dabei die bereits getätigten Auswahlen der anderen Comboboxen berücksichtigen.
mach also das Befüllen der Inhalte der einzelnen Comboboxen im DropButtonClick-Event der jeweiligen Combobox und wähle als Zellbereich für die Werteermittlung den Bereich, den du auch für die RowSource verwendest.
Gruß Daniel
AW: Code funktioniert nicht bei Zahl
25.10.2022 17:36:28
Henry
Hallo Daniel,
ich habe im DropButtonClick Event jetzt folgenden Code stehen:

Private Sub ComboBox1_DropButtonClick()
With ComboBox1
.Style = 2
For Each Zelle In Sheets("Tabelle1").Cells(1, 1).CurrentRegion.Columns(5).Cells
If Zelle.Row > 1 Then
For i = 0 To .ListCount - 1
If Zelle.Text  .List(i) Then
.AddItem Zelle.Text, i
End If
End If
Next
End With
End Sub
Mir ist allerdings nicht klar, was du mit folgendem Satz meinst bzw. wie ich das umsetzen soll.
"und wähle als Zellbereich für die Werteermittlung den Bereich, den du auch für die RowSource verwendest"
Meine ListBox lade ich mit:
Me.ListBox1.RowSource = .Name & "!A2:L" & LetzteZeile
VG
Henry
AW: Code funktioniert nicht bei Zahl
25.10.2022 20:57:43
Daniel
For each Zelle in Range(Listbox1.RowSource).Columns(5).Cells
Irgendwie Logisch, oder?
AW: Code funktioniert nicht bei Zahl
26.10.2022 07:41:20
Henry
Hallo Daniel,
vielen Dank.
Das klappt schon ganz gut.
Allerdings nur für den ersten Durchgang.
Wenn ich mit den Filtern dann etwas "rumprobiere", kommt die ListBox irgendwie durcheinander.
Ich habe mal einen Button eingefügt, mit dem ich die ComboBoxen "clear".
Wenn ich den Button drücke und dann filtere, klappt es für den ersten Durchgang wieder.
Ich habe nochmal meine Datei beigefügt.
Vielleicht ist dann verständlicher was ich meine.
https://www.herber.de/bbs/user/155861.xlsm
VG Henry
AW: Code funktioniert nicht bei Zahl
26.10.2022 14:23:53
Daniel
Hi
AddItem fügt immer nur hinzu, bereits vorhandene Werte bleiben erhalten.
das Problem entsteht, wenn du beispielsweise erstmal die Alias-Box anklickst um dir die Alias-Namen anzeigen zu lassen, jetzt müssen alle drei Aliasnamen in die Liste.
Filterst du danach z.B. nach Jahr und dann klickst danach nochnmal auf den Alias-Drop-Button, dürfen nur noch ein- oder zwei Aliasnamen erscheinen.
Dh du musst erstmal die Inhalte der Liste leeren (Combobox1.Clear), bevor du die einzelnen Werte hinzufügst, sonst ist die Liste beim mehrfachen Anklicken nicht aktuell.
Gruß Daniel
AW: Code funktioniert nicht bei Zahl
26.10.2022 16:18:10
Henry
Hallo Daniel,
vielen Dank für deine Nachricht.
Ich habe versucht ComboBox1.Clear zum einen im Change Ereignis der ComboBox1 oder zum anderen im DropButtonClick Ereignis der ComboBox1 unterzubringen.
Beides hat nicht zum gewünscht Erfolg geführt.
Ich glaube ich habe das an der falschen Stelle stehen.
Kannst du mir nochmal helfen und sagen an welcher Stelle ich ComboBox1.Clear hinzufügen muss.
VG
Henry
AW: Code funktioniert nicht bei Zahl
26.10.2022 16:40:50
Daniel
naja, erst alles löschen und dann die Werte hinzufügen, die hinein gehören.
AW: Code funktioniert nicht bei Zahl
26.10.2022 17:14:32
Henry
Hallo Daniel,
meinst du so?
So habe ich es versucht, das hat aber leider nicht geklappt.

Private Sub ComboBox1_DropButtonClick()
ComboBox1.Clear
With ComboBox1
.Style = 2
For Each Zelle In Range(ListBox1.RowSource).Columns(5).Cells
If Zelle.Row > 1 Then
For i = 0 To .ListCount - 1
If Zelle.Text  .List(i) Then
.AddItem Zelle.Text, i
End If
End If
Next
End With
End Sub

AW: Code funktioniert nicht bei Zahl
26.10.2022 17:28:34
Daniel
definiere "hat nicht funktionert" genauer
wo ist die Datei, mit der ich das testen kann?
und bau da bitte mal einen Button ein, mit dem ich die Userform starten kann.
AW: Code funktioniert nicht bei Zahl
26.10.2022 18:41:28
Henry
Hallo Daniel,
anbei die Datei:
https://www.herber.de/bbs/user/155874.xlsm
Nun kann ich nicht mehr filtern, wenn ich ComboBox1.Clear schreibe.
Es tut sich nichts wenn ich in ComboBox1 einen Wert auswähle.
VG
Henry
AW: Code funktioniert nicht bei Zahl
26.10.2022 19:12:14
Daniel
Hi
jetzt bin ich auch überfragt. oder ich müsste da mehr Zeit und Aufwand reinstecken, als ich das ohne Gegenleistung von dir zu tun bereit bin.
Gruß Daniel
AW: Code funktioniert nicht bei Zahl
27.10.2022 05:22:55
Henry
Hallo Daniel,
okay. Dann kann man glaube ich nichts machen.
Trotzdem danke für deine Hilfe.
AW: Code funktioniert nicht bei Zahl
25.10.2022 09:54:15
Rudi
Hallo,
dann schreib das Jahr als Zahl in den Namen.

      ThisWorkbook.Names("sortierenjahr").RefersToR1C1 = ComboBox4.Value * 1
Gruß
Rudi
AW: Code funktioniert nicht bei Zahl
25.10.2022 11:07:45
GerdL
Moin
Private Sub ComboBox4_Change()
Dim X As Long, bln As Boolean
ThisWorkbook.Names("sortierenjahr").RefersToR1C1 = ComboBox4.Value
'...........
und bei ComboBox5_Change anlalog.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige