Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

ListBox.List
#1
Hallo,

eigentlich sollte es ganz einfach sein:

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.

Danke.

mfg


Angehängte Dateien
.xlsm   ListBox.xlsm (Größe: 16,94 KB / Downloads: 11)
Antworten Top
#2
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.
Code:
ListBox1.ListIndex = -1

Gruß Elex
Antworten Top
#3
Danke

So geht es, aber es bleibt in einer etwas komplexeren Umgebung ziemlich störend.

mfg
Antworten Top
#4
Hallo mfg,

Code:
Private Sub ListBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  ListBox1.ListIndex = -1
End Sub

Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  ListBox1.ListIndex = -1
End Sub

Gruß Uwe
Antworten Top
#5
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 = " "

    With Me.ListBox1
        Debug.Print "Click: List.Index", .ListIndex
        Me.TextBox1 = .List(.ListIndex, 0) & "  " & .List(.ListIndex, 1)
        .AddItem .List(.ListIndex, 0), 0
        .List(0, 1) = .List(.ListIndex, 1)
       
        .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.

Zumindest für ist das unkontrollierbar.

mfg


Angehängte Dateien
.xlsm   ListBox.xlsm (Größe: 23,61 KB / Downloads: 4)
Antworten Top
#6
Hallo mfg,

ich dachte, Du verstehst meinen (indirekten) Hinweis, Dich vom Click-Ereignis loszusagen. Wink

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

Gruß Uwe
Antworten Top
#7
Hallo Kuwer,

vielen Dank, jetzt läuft es so wie es sollte.

mfg
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste