Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Drag & Drop mehrspaltige Listbox

Drag & Drop mehrspaltige Listbox
Detlef
Hallo Excel-Profis´s
ich habe in der Excelhilfe ein Beispiel für Drag & Drop von Listbox zu Listbox gefunden; leider funktioniert das nur bei einspaltigen Listboxen
Ich habe aber als Ausgang (Listbox1) eine zweispaltige Listbox und in Listbox2 sollen die Daten auch wieder zweispaltig ankommen
Private Sub ListBox2_BeforeDragOver(ByVal Cancel As _
MSForms.ReturnBoolean, ByVal Data As _
MSForms.DataObject, ByVal X As Single, _
ByVal Y As Single, ByVal DragState As Long, _
ByVal Effect As MSForms.ReturnEffect, _
ByVal Shift As Integer)
Cancel = True
Effect = 1
End Sub

Private Sub ListBox2_BeforeDropOrPaste(ByVal _
Cancel As MSForms.ReturnBoolean, _
ByVal Action As Long, ByVal Data As _
MSForms.DataObject, ByVal X As Single, _
ByVal Y As Single, ByVal Effect As _
MSForms.ReturnEffect, ByVal Shift As Integer)
Cancel = True
Effect = 1
ListBox2.AddItem Data.GetText
End Sub

Private Sub ListBox1_MouseMove(ByVal Button As _
Integer, ByVal Shift As Integer, ByVal X As _
Single, ByVal Y As Single)
Dim MyDataObject As DataObject
If Button = 1 Then
Set MyDataObject = New DataObject
Dim Effect As Integer
MyDataObject.SetText ListBox1.Value
Effect = MyDataObject.StartDrag
End If
End Sub

Private Sub UserForm_Initialize()
For i = 1 To 10
ListBox1.AddItem "Choice " _
& (ListBox1.ListCount + 1)
Next i
End Sub

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Drag & Drop mehrspaltige Listbox
12.06.2010 21:06:53
Nepumuk
Hallo Detlef,
mit ein bisschen Nachdenken hättest du das selber gekonnt.
Option Explicit

Private Const SEPARATOR = "Þ"

Private Sub ListBox2_BeforeDragOver( _
        ByVal Cancel As MSForms.ReturnBoolean, _
        ByVal Data As MSForms.DataObject, _
        ByVal X As Single, _
        ByVal Y As Single, _
        ByVal DragState As Long, _
        ByVal Effect As MSForms.ReturnEffect, _
        ByVal Shift As Integer)

    
    Cancel = True
    Effect = 1
    
End Sub

Private Sub ListBox2_BeforeDropOrPaste( _
        ByVal Cancel As MSForms.ReturnBoolean, _
        ByVal Action As Long, _
        ByVal Data As MSForms.DataObject, _
        ByVal X As Single, _
        ByVal Y As Single, _
        ByVal Effect As MSForms.ReturnEffect, _
        ByVal Shift As Integer)

    
    Dim strText As String
    
    Cancel = True
    Effect = 1
    
    strText = Data.GetText
    
    With ListBox2
        .AddItem
        .List(.ListCount - 1, 0) = Split(strText, SEPARATOR)(0)
        .List(.ListCount - 1, 1) = Split(strText, SEPARATOR)(1)
    End With
    
End Sub

Private Sub ListBox1_MouseMove( _
        ByVal Button As Integer, _
        ByVal Shift As Integer, _
        ByVal X As Single, _
        ByVal Y As Single)

    
    Dim MyDataObject As DataObject
    Dim Effect As Integer
    Dim strText As String
    
    If Button = 1 Then
        Set MyDataObject = New DataObject
        With ListBox1
            strText = .List(.ListIndex, 0) & _
                SEPARATOR & .List(.ListIndex, 1)
        End With
        MyDataObject.SetText strText
        Effect = MyDataObject.StartDrag
    End If
    
End Sub

Private Sub UserForm_Activate()
    Dim intIndex As Integer
    With ListBox1
        For intIndex = 1 To 10
            .AddItem
            .List(.ListCount - 1, 0) = "Column 1 " _
                & CStr(intIndex)
            .List(.ListCount - 1, 1) = "Column 2 " _
                & CStr(intIndex)
        Next
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Drag & Drop mehrspaltige Listbox
12.06.2010 21:56:03
Detlef
Danke Nepumuk
hab noch etwas experimentiert und bin auf diese (nicht ganz elegante Lösung) gekommen; die Länge des zweiten Textteils ist nicht optimal berechnet mir reichts im Moment aber so
Private Sub ListBox2_BeforeDragOver(ByVal Cancel As _
MSForms.ReturnBoolean, ByVal Data As _
MSForms.DataObject, ByVal X As Single, _
ByVal Y As Single, ByVal DragState As Long, _
ByVal Effect As MSForms.ReturnEffect, _
ByVal Shift As Integer)
Cancel = True
Effect = 1
End Sub

Private Sub ListBox2_BeforeDropOrPaste(ByVal _
Cancel As MSForms.ReturnBoolean, _
ByVal Action As Long, ByVal Data As _
MSForms.DataObject, ByVal X As Single, _
ByVal Y As Single, ByVal Effect As _
MSForms.ReturnEffect, ByVal Shift As Integer)
Cancel = True
Effect = 1
ListBox2.AddItem
ListBox2.List(ListBox2.ListCount - 1, 0) = Mid(Data.GetText, 1, InStr(1, Data.GetText, "#")  _
- 1)
ListBox2.List(ListBox2.ListCount - 1, 1) = Mid(Data.GetText, InStr(1, Data.GetText, "#") +  _
1, Len(Data.GetText))
End Sub

Private Sub ListBox1_MouseMove(ByVal Button As _
Integer, ByVal Shift As Integer, ByVal X As _
Single, ByVal Y As Single)
Dim MyDataObject1 As DataObject
If Button = 1 Then
txt = ListBox1.List(ListBox1.ListIndex, 0) & "#" & ListBox1.List(ListBox1.ListIndex, 1)
Set MyDataObject1 = New DataObject
Dim Effect As Integer
MyDataObject1.SetText txt
Effect = MyDataObject1.StartDrag
End If
End Sub
Private Sub UserForm_Initialize()
For a = 11 To 15
ListBox1.AddItem
ListBox1.List(a - 11, 0) = Cells(a, 1)
ListBox1.List(a - 11, 1) = Cells(a, 2)
Next a
ListBox1.ListIndex = 1
End Sub

Gruß Detlef
Auf Euch Profis kann man sich eben immer wieder verlassen
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Drag & Drop in mehrspaltigen Listboxen in Excel


Schritt-für-Schritt-Anleitung

  1. Vorbereitung: Öffne Excel und erstelle ein neues UserForm.
  2. Listboxen hinzufügen: Füge zwei Listboxen (ListBox1 und ListBox2) zum UserForm hinzu.
  3. VBA Code einfügen: Öffne den VBA-Editor (Alt + F11) und füge den folgenden Code in das UserForm ein:
Private Sub UserForm_Initialize()
    For i = 1 To 10
        ListBox1.AddItem "Choice " & (ListBox1.ListCount + 1)
    Next i
End Sub

Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim MyDataObject As DataObject
    If Button = 1 Then
        Set MyDataObject = New DataObject
        MyDataObject.SetText ListBox1.Value
        MyDataObject.StartDrag
    End If
End Sub

Private Sub ListBox2_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As Long, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
    Cancel = True
    Effect = 1
End Sub

Private Sub ListBox2_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, ByVal Action As Long, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
    Cancel = True
    Effect = 1
    ListBox2.AddItem Data.GetText
End Sub
  1. Testen: Starte das UserForm und teste das Drag & Drop.

Häufige Fehler und Lösungen

  • Fehler 1: Kein Drag & Drop möglich.

    • Lösung: Stelle sicher, dass die Listboxen im UserForm korrekt konfiguriert sind. Überprüfe die Event-Handler.
  • Fehler 2: Daten werden nicht korrekt übertragen.

    • Lösung: Achte darauf, dass die Data.GetText-Methode den richtigen Text zurückgibt. Überprüfe, ob die Werte in der Listbox vorhanden sind, bevor du sie überträgst.

Alternative Methoden

Falls du keine VBA-Programmierung verwenden möchtest, kannst du die Drag & Drop Funktionalität auch über die Drag and Drop Tastenkombination simulieren. Markiere einfach die Zellen, die du verschieben willst, und kopiere sie mit Strg + C und füge sie mit Strg + V in die Zielzelle ein. Diese Methode ist jedoch weniger flexibel als das Drag & Drop in Excel.


Praktische Beispiele

Ein praktisches Beispiel für ein mehrspaltiges Drag & Drop in Excel wäre eine Liste von Produkten, die du in eine andere Liste für Bestellungen verschieben möchtest. Setze die ersten beiden Spalten für Produktnamen und Preise in ListBox1 und lasse sie in ListBox2 übertragen.

Private Sub UserForm_Initialize()
    For a = 1 To 10
        ListBox1.AddItem "Produkt " & a
        ListBox1.List(a - 1, 1) = a * 10  ' Preis
    Next a
End Sub

Tipps für Profis

  • Verwende Seperator, um mehrere Spalten in Textform zu trennen. Das erleichtert das Drag & Drop von mehrspaltigen Listboxen erheblich.
  • Experimentiere mit der Drag and Drop Excel API, um erweiterte Funktionen zu integrieren.
  • Schaffe ein benutzerfreundliches Interface, indem du visuelle Hinweise gibst, wenn Daten gezogen werden können.

FAQ: Häufige Fragen

1. Wie kann ich Drag & Drop für mehrspaltige Listboxen aktivieren?
Die Aktivierung erfolgt über die Verwendung von Data.GetText für die Übertragung der Daten zwischen den Listboxen.

2. Kann ich Drag & Drop mit Tastenkombinationen kombinieren?
Ja, du kannst die Drag and Drop Tastenkombination verwenden, um Daten zusätzlich manuell zu verschieben.

3. Funktioniert Drag & Drop in allen Excel-Versionen?
Die oben genannten Methoden sollten in den meisten aktuellen Excel-Versionen funktionieren, insbesondere in Excel 2010 und neuer.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige