Listbox in Zwischenablage kopieren
#1
Hello alle zusammen,

bin durch alle hier echt weit gekommen, jetzt stehe ich vor dem nächsten Problem. Ich habe in einer Listbox mehrere Spalten und würde diese gerne per Button in die Zwischenablage kopieren. Mit dem Code unten schaffe ich es nur eine Spalte zu kopieren. Insgesamt brauche ich 4 Spalten. Das Ganze habe ich so eingelesen:
Code:
'Einlesen in die Listbox!

Dim i As Long
Dim varListe As Variant
varListe = Worksheets("ADS").Range("A2").CurrentRegion.Value
With ADS.ListBox1

  .Clear
  .ColumnCount = UBound(varListe, 2) 'Gibt an Welche ?berschrift'
  .AddItem varListe(1, 1)
  .List(.ListCount - 1, 1) = varListe(1, 2)
  .List(.ListCount - 1, 2) = varListe(1, 3)
  .List(.ListCount - 1, 3) = varListe(1, 4)
  '.List(.ListCount - 1, 4) = varListe(1, 5)'
 
 
    For i = 2 To UBound(varListe, 2)
        .AddItem varListe(i, 1) 'Gibt an welche Datenreihe'
        .List(.ListCount - 1, 1) = varListe(i, 2)
        .List(.ListCount - 1, 2) = varListe(i, 3)
        .List(.ListCount - 1, 3) = varListe(i, 4)
     
     

    Next i
 
End With

Code:
'In Zwischenablage'

Private Sub CommandButton2_Click()

Dim strArray() As String, strText As String
   Dim lngIndex As Long
   Dim objClipboard As DataObject
   Set objClipboard = New DataObject
   With ListBox1
       ReDim strArray(1 To .ListCount)
       For lngIndex = 1 To .ListCount
           strArray(lngIndex) = .List(lngIndex - 1, 0)
           strArray(lngIndex) = .List(lngIndex - 1, 1)
       Next
   End With
   strText = Join(strArray, vbLf)
   With objClipboard
       .SetText strText
       .PutInClipboard
   End With
   Set objClipboard = Nothing

   
End Sub
Top
#2
Hallo,

Gegenfrage: was ist denn ein "DataObject"? Mein Excel kennt das nicht ...

An der Stelle ist der Code unsinnig


Code:
For lngIndex = 1 To .ListCount
           strArray(lngIndex) = .List(lngIndex - 1, 0)
           strArray(lngIndex) = .List(lngIndex - 1, 1)

Die letzte Zeile überschreibt die Zuweisung aus der vorletzten.
sowas wie
Code:
strArray(lngIndex) = .List(lngIndex - 1, 0) & ";" & .List(lngIndex - 1, 1)

ist hier tunlich


vg, MM
Top
#3
Und befüllen geht so:

Code:
ListBox1.List=sheets("ADS").Range("A2").CurrentRegion.Value

Warum die Zwischenanlage ?

Wo sollten die Daten geraten ?
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#4
(25.06.2019, 15:44)mmat schrieb: Gegenfrage: was ist denn ein "DataObject"? Mein Excel kennt das nicht ...

Guckst Du z.B.: Zugriff auf die Zwischenablage (Clipboard)

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • mmat
Top
#5
Beim Befüllen werden alle Einträge aus verschiedenen Zeilen genommen. So sollen die ja auch zwischengespeichert werden.
Top
#6
Hallo Deeage,

nochmal in anderen Worten: der von mir angemerkte Progammfehler in deinem Makro CommandButton2_Click() bewirkt, dass nur die letzte Spalte in der Zwischenablage ankommt.

vg, MM
Top
#7
Hallo MM,


ja simpel Smile .. Danke funktioniert jetzt alles super Smile 1000 Dank
Top


Gehe zu:


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