Drag and Drop Lixtboxen
#1
Hallo!
Habe eine Userform mit 2 Listboxen.
Möchte nun gerne die Daten aus ListBox1 in Listbox2 per Drag and Drop reinziehen.
Dies geht auch bei einer einspaltigen Listbox, habe eine mit ca,10 Spalten.
Die Daten für ListBox1 werden aus der Tabelle1 eingelesen

Wie müsste dan der Code für eine mehrspaltige ListBox geändert werden?

Den Code der benutz wird überprüft auch gleich ob der eintrag schon vorhanden ist.
Was ich noch gerne möchte ist, das der Wert der aus TextBox1 in Textbox2 gezogen wird in der TextBox1 nicht mehr sichtbar ist.

Wie ist das Möglich?

Habe dann noch andere Fragen!
Möchte aber erstmal dafür eure Hilfe.
Im Anhang ein Beispiel mit dem Code.


Angehängte Dateien
.xlsm   ListDragDrop.xlsm (Größe: 34,51 KB / Downloads: 2)
mfg
Michael
:98:

WIN 10  Office 2019
Top
#2
Hallo!

Habe mich von der mehrspaltigen Listbox erstmal verabschiedet.
Da mir heute aufgefallen ist das ich sie so niicht brauche.
Jezt brauche ich aber doch eure Hilfe, beim Löschen vom Listbox eintrag.

Ich möchte gerne wenn der Listbox1 eintrag in die ListBox2 gezogen wird der eintrag in der Listbox1 nicht mehr sichtbar ist.

ich habe das mit diesen Code probiert, doch dann bekomme ich einen Fehler.

Code:
Private Sub ListBox2_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, _
               ByVal Action As MSForms.fmAction, _
               ByVal Data As MSForms.DataObject, _
               ByVal X As Single, _
               ByVal Y As Single, _
               ByVal Effect As MSForms.ReturnEffect, _
               ByVal Shift As Integer)
Dim arrListe() As String
Dim i As Integer
Dim lPos, a As Long
Cancel = True
Effect = fmDropEffectCopy
'Text aus dem DataObject ziehen, falls nicht schon enthalten
If Not ItemExists(ListBox2, Data.GetText) Then
ListBox2.AddItem Data.GetText

   With ListBox1
   For a = .ListCount - 1 To 0 Step -1
     If .Selected(a) Then
       '.RemoveItem (a)
       .RemoveItem a
       
     End If
   Next a
 End With

ElseIf ItemExists(ListBox2, Data.GetText) Then

lPos = Int(Y / (ListBox2.Height / (ListBox2.Font.Size + 2)))
ListBox2.AddItem Data.GetText, lPos
ende:
End If
End Sub
An dieser Stelle Bekomme ich den fehler
Laufzeitfehler'-2147467259(80004005)':
Nicht näher bezeichneter Fehler

Code:
   With ListBox1
   For a = .ListCount - 1 To 0 Step -1
     If .Selected(a) Then
       '.RemoveItem (a)
       .RemoveItem a
       
     End If
   Next a
 End With
jedesmal bei RemoveItem

Frage was mach ich Falsch um den selktrierten eintrag in Listbox1 zu löschen?

Wert aus Listbox1 wird mit Drag and Drop in Listbox2 gezogen
Dann soll der wert der aus ListBox1 in Listbox2 gezogen wurde in ListBox1 gelöscht werden.


Danke schon mal für eure Tipp's


Angehängte Dateien
.xlsm   ListDragDrop.xlsm (Größe: 34,24 KB / Downloads: 5)
mfg
Michael
:98:

WIN 10  Office 2019
Top
#3
Hallo,

eventuell hat Excel ein Problem damit, dass Du den zu kopierenden Eintrag löschst, bevor er eingefügt wird.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#4
Hallo Andre!
Ich habe es gefundenden warum Excel den fehler gibt.
Die liste wurde mit Rouws eingelesen und nicht mit AddItem, deswegen gibt es einen Fehler.
Habe schon fast alles hinbekommen was ich an fragen gestellt habe.

Nun habe ich ein neues Problem!

Ich beschreibe erstmal das was geht

man kann die werte aus ListBox1 in ListBox2 ziehen und zurück
man kann auch die werte in der listbox2 unter einander hin und her schieben

jezt zum Problem was ich habe

Nimmt man den letzten wert in der listbox1 und zieht ihn in die die listbox2

WERDEN alle werte die in der listbox1 noch stehen müssten gelöscht!

Das sollte so nicht sein!
Es soll nur der wert der von der Listbox1 in die ListBox2 gezogen wird gelöscht werden.

Das ganze ist beim Testen zu sehen!
Der  Code steht in der UserForm1


Wie schon immer gesagt für Tipp's oder lösungen Danke ich allen!

Wenn meine ausführung unverständlich ist bitte melden auch unter PN oder Mail

Danke schon mal an alle!


Angehängte Dateien
.xlsm   ListDragDrop.xlsm (Größe: 45,6 KB / Downloads: 4)
mfg
Michael
:98:

WIN 10  Office 2019
Top
#5
Hallöchen,

erst mal nur ein Gedanke. Durch das Löschen werden eventuell Ereignisse ausgelöst. Schreib vor dem Löschen eine globale Variable, die Du auf true setzt und in anderen Makros gleich am Anfang auswertest. Bei True nimmst Du dort dann Exit Sub.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#6
Hallo Michael,

(29.09.2017, 22:09)michel34497 schrieb: man kann auch die werte in der listbox2 unter einander hin und her schieben
Das geht mit Deiner letzten Datei nicht.  Huh

(29.09.2017, 22:09)michel34497 schrieb: Nimmt man den letzten wert in der listbox1 und zieht ihn in die die listbox2
WERDEN alle werte die in der listbox1 noch stehen müssten gelöscht!
Das sollte so nicht sein!
Teste es so:
Private Sub ListBox2_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, _
               ByVal Action As MSForms.fmAction, _
               ByVal Data As MSForms.DataObject, _
               ByVal X As Single, _
               ByVal Y As Single, _
               ByVal Effect As MSForms.ReturnEffect, _
               ByVal Shift As Integer)

 Dim arrListe() As String
 Dim I As Integer
 Dim lPos, a As Long
 Cancel = True
 Effect = fmDropEffectCopy
 'Text aus dem DataObject ziehen, falls nicht schon enthalten
 If Not ItemExists(ListBox2, Data.GetText) Then
   ListBox2.AddItem Data.GetText
   ' selektierten Eintrag einer Liste löschen
   With ListBox1
     For a = .ListCount - 1 To 0 Step -1
       If .Selected(a) Then
         .RemoveItem a
         .ListIndex = -1
       End If
     Next a
   End With
 ElseIf ItemExists(ListBox2, Data.GetText) Then
   lPos = Int(Y / (ListBox2.Height / (ListBox2.Font.Size + 2)))
   ListBox2.AddItem Data.GetText, lPos
 End If
End Sub

Code eingefügt mit: Excel Code Jeanie


Gruß Uwe
Top
#7
Hallo Andre und Uwe

danke für das intresse.

Habe das von Uwe eingebaut und geht!

Das Problem ist gelöst.

@Uwe
Zitat:michel34497 schrieb: [url=http://www.clever-excel-forum.de/Thread-Drag-and-Drop-Lixtboxen?pid=94399#pid94399][/url]man kann auch die werte in der listbox2 unter einander hin und her schieben
Uwe schrieb: Das geht mit Deiner letzten Datei nicht.  [img]
Dateiupload bitte im Forum! So geht es: Klick mich!
]


Doch das geht!
Der fehler der dort noch ist liegt an der stelle
Code:
  lPos = Int(Y / (ListBox2.Height / (ListBox2.Font.Size + 2)))
bei dem eintrag +2.
Ich habe noch keinen ansatzt wie man das ändern könnte.
Was dabei auch noch ein problem ist:
Zieht mann den Wert in der ListBox2 an eine freie stelle in der ListBox2 bekommt man einen Fehler
Laufzeitfehler und Ungüliteges Argument

Muß noch ein bisschen rumtüftlen, vieleicht bekomme ich es noch hin!

Aber wer Tip's und Lösungvorschläge hat, gerne Schreiben!

Danke für die Hilfe!
Eine etwas bereinigte Datei im Anhang.


Angehängte Dateien
.xlsm   ListDragDrop.xlsm (Größe: 33,83 KB / Downloads: 4)
mfg
Michael
:98:

WIN 10  Office 2019
Top


Gehe zu:


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