Eine ListBox (UserForm) wird mit einem Bereich des Sheets gefüllt (ok).
Danach soll der Inhalt der Listbox in ein Array geschrieben werden. der Inhalt der ListBox gelöscht und erneut aus dem Array gefüllt werden:
Aber die ListBox bleibt leer:
Code:
Private Sub UserForm_Initialize() Ar = Sheets(1).Range("A1").CurrentRegion Me.ListBox1.List = Ar '<--- OK End Sub
Private Sub ListBox1_Click() Ar = Me.ListBox1.List
With Me.ListBox1 .Clear '.AddItem "qwe" 'ok .List = Ar Debug.Print .ListCount, .List(0, 0), .List(0, 1) '<--- OK, aber ListBox ist leer End With End Sub
Warum dieser Ansatz?
Nach einem Klick in die ListBox funktioniert ein ".Selected(.ListIndex) = false" nicht um die Selektion wieder aufzuheben.
Manchmal sind es die kleinen Dinge, die ziemlich stören können.
07.10.2021, 15:42 (Dieser Beitrag wurde zuletzt bearbeitet: 07.10.2021, 15:55 von Elex.)
Hi
Wenn du den Code z.B. in einen Button legst geht es. Liegt wahrscheinlich daran das das List.Klick erst abgearbeitet sein muss bevor die Liste geändert werden kann.
Code:
Private Sub CommandButton1_Click() Ar = Me.ListBox1.List
With Me.ListBox1 .Clear '.AddItem "qwe" 'ok .List = Ar Debug.Print .ListCount, .List(0, 0), .List(0, 1) End With End Sub
Private Sub UserForm_Initialize() Ar = Sheets(1).Range("A1").CurrentRegion Me.ListBox1.List = Ar End Sub
Das Klappt auch nur im Button und nicht im List.Klick.
07.10.2021, 20:22 (Dieser Beitrag wurde zuletzt bearbeitet: 07.10.2021, 20:22 von Fennek.)
Hallo,
das ist keine Frage, sondern nur ein Kommentar der Verwunderung:
Im eigentlichen Problem, soll das angeklickte Item der Listbox an die erste Stelle kopiert und an der ursprüglichen Stelle gelöscht werden. Außerdem soll das Item in eine Textbox kopiert werden:
Code:
Private Sub UserForm_Initialize() Dim Ar(5, 1) For i = LBound(Ar) To UBound(Ar) Ar(i, 0) = CStr(10000 + i) Ar(i, 1) = "Text" & i Next i Me.ListBox1.List = Ar End Sub
Private Sub ListBox1_Click() If Me.Tag = " " Then Exit Sub Me.Tag = " "
.TopIndex = 0 For i = .ListCount - 1 To 1 Step -1 If .List(i) = .List(0) Then .RemoveItem i ': Stop Next i .Selected(.ListIndex) = False End With Me.Tag = ""
End Sub
Das Ergebnis ist ziemlich chaotisch: Es werden 2-3 Items nach oben kopiert. Die Markierung bleibt bestehen. Selbst kleinste Änderungen führen zu deutlich anderen Ergebnissen.
07.10.2021, 23:24 (Dieser Beitrag wurde zuletzt bearbeitet: 07.10.2021, 23:24 von Kuwer.
Bearbeitungsgrund: Code ergänzt
)
Hallo mfg,
ich dachte, Du verstehst meinen (indirekten) Hinweis, Dich vom Click-Ereignis loszusagen.
Code:
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim i As Long With Me.ListBox1 i = .ListIndex If i > -1 Then Me.TextBox1 = .List(i, 0) & " " & .List(i, 1) .AddItem .List(i), 0 .List(0, 1) = .List(i + 1, 1) .RemoveItem i + 1 .ListIndex = -1 .List = .List End If End With End Sub