Anzeige
Archiv - Navigation
1320to1324
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

Listbox

Listbox
04.07.2013 14:51:32
willfried
Hallo Excel Profis,
habe hier ein kleines problem mit meiner Listbox. hier mal der Code.

Private Sub UserForm_Initialize()
With Me.listbox
Dim rngC         As Range
Dim rngZelle                  As Range
Dim rngZelle1                 As Range
listbox.Clear
For Each rngC In Range(Cells(ActiveCell.Row, 11), Cells(ActiveCell.Row, 22))
If Len(rngC) Then
With listbox
.AddItem rngC.Value
.Selected(.ListCount - 1) = True
End With
End If
Next
For Each rngZelle In Worksheets("daten").Range("E5:E392")
If IsEmpty(rngZelle) Then Exit Sub
Me.listbox.AddItem rngZelle.Value
Next rngZelle
End With
With Me.ListBox1
For Each rngZelle In Worksheets("daten").Range("I5:I392")
If IsEmpty(rngZelle) Then Exit Sub
Me.ListBox1.AddItem rngZelle.Value
Next rngZelle
End With
End Sub
Zu meinem Problem, das Einlesen der Werte funktioniert, nur sollen keine doppelten Einträge vorhanden sein, bzw. die Wwerte aus der ersten Schleife sollen markiert sein.
Userbild
Hat jemand eine Idee das der doppelte Eintrag rauskommt und nur einer markiert wird?
Danke schon mal für Eure Zeit.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox
04.07.2013 15:50:50
Klaus
Hi,
dein Code ist sehr unaufgeräumt und unstrukturiert. Lass mich raten (nicht böse gemeint): alles irgendwo aufgeschnappt und reinkopiert, aber keinen Plan was da passiert?
Referenzierungen unnötig oder falsch, Referenzierung um DIM herum usw ...
Also habe ich zuerst mal deinen Code aufgeräumt:
Private Sub UserForm_Initialize()
Dim rngC         As Range
Dim rngZelle     As Range
REM Dim rngZelle1    As Range 'wozu? Diese Variable kommt nirgendwo vor ...
With Me.ListBox
.Clear
For Each rngC In Range(Cells(ActiveCell.Row, 11), Cells(ActiveCell.Row, 22))
If Len(rngC) Then
.AddItem rngC.Value
.Selected(.ListCount - 1) = True
End If
Next rngC
For Each rngZelle In Worksheets("daten").Range("E5:E392")
If IsEmpty(rngZelle) Then Exit Sub
.AddItem rngZelle.Value
Next rngZelle
End With
For Each rngZelle In Worksheets("daten").Range("I5:I392")
If IsEmpty(rngZelle) Then Exit Sub
Me.ListBox1.AddItem rngZelle.Value
Next rngZelle
End Sub
Jetzt stelle ich fest: in deinem Code sind ZWEI Listboxen, und zwar Namens (1) "ListBox" und (2) "ListBox1".
die (1) Listbox befüllst du einmal von Spalte 11 bis 22 aus der aktiven Zeile, DANACH befüllst du sie weiter aus Worksheets("daten").Range("E5:E392"). Sollte hier eine leere Zelle vorkommen, brichst du den kompletten Code ab (Exit Sub) so dass (2) ListBox1 niemals eine Chance bekommt auch befüllt zu werden.
(2) ListBox1 befüllst du aus Worksheets("daten").Range("I5:I392"), auch hier mit einer rigorosen Abbruch-Bedingung.
Jetzt die Frage: Was genau möchtest du erreichen? Aus deiner Frage im Zusammenhang mit deinem Code werde ich nicht schlau.
Ich vermute, du möchtest eine der ListBoxen aus einem definiertem Range füllen, ab Zeile 5 und bis zur ersten leeren Zeile. Dabei möchtest du doppelte Einträge vermeiden.
- liege ich richtig?
- falls ja: WELCHE Listbox? (1) Listbox oder (2) ListBox1 ?
Wie auch immer: einen Musterdatei wäre sehr gut! Ich möchte dir keine halbseidene Lösung reinstricken, nur weil ich die Datenbasis nicht kenne.
Grüße,
Klaus M.vdT.

Anzeige
Frage zu "If Len(rngC) Then"
04.07.2013 18:01:41
Martin
Hallo,
ich habe eine allgemeine Frage zu folgender If-Abfrage:
If Len(rngC) Then

Warum muss es nicht heißen:

If Len(rngC) > 0 Then
?
Gehe ich recht in der Annahme, dass Null immer "Falsch" entspricht und bei jeder If-Abfrage mit Rückgabewert einer Zahl (wie in diesem Fall mit "LEN") ein "> 0" weggelassen werden kann, wenn das Ergebnis ungleich Null sein soll?
Viele Grüße
Martin

If Len(rngC) ergibt WAHR also <>0 kwT
04.07.2013 18:08:56
Matthias

Danke! owT
04.07.2013 18:51:52
Martin
owT

hat sich gerade überschnitten ... kwT
04.07.2013 19:00:49
Matthias

Hab ich Dich verwirrt ?
04.07.2013 18:59:56
Matthias
Hallo
Hab ich Dich verwirrt?
If Len(rngC) ergibt WAHR also <>0 und das natürlich nur wenn ein Inhalt in der Zelle steht.
Deine Annahme ist also genau richtig: 0 = FALSCH (in VBA -> False)
Bei der IF-Abfrage wird alo (bei Inhalt) ein Wert >0 zurückgegeben und der ist WAHR
Also wird der IF-Zweig ausgeführt. Wäre die Zelle leer brächte Len(Zelle) 0(Null) als Ergebnis
und der Else-Zweig wird ausgeführt
Gruß Matthias
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige