Zelleninhalt in Clipboard(Zwischenablage) schreiben

  • Excel

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von hipfzwirgel.

    Zelleninhalt in Clipboard(Zwischenablage) schreiben

    Hallo Zusammen,

    folgender Sachverhalt:

    in der Excel-2016-Spalte D(Zeilen 2 bis 31) wird mittels der Formel =WENN(C2="nicht identisch";A2;"") der Inhalt von Spalte A ggf. ausgegeben. Somit stehen in der Spalte D meistens in verschiedenen
    Zellen Inhalte(Strings). Nun versuche ich nur die Zellen der Spalte D auszulesen die gefüllt sind und mit VBA in den Zwischenspeicher zu schreiben, um sie in andere Dateien(txt, doc, xls, etc. einfügen zu können)



    mit

    Visual Basic-Quellcode

    1. Sub Drivercopy()
    2. Dim y As Integer
    3. Dim Myarr() As Variant
    4. For y = 2 To 31
    5. If Cells(y, 4).Value <> "" Then
    6. Debug.Print Cells(y, 4).Value
    7. Next
    8. End Sub


    der For-Schleife kann ich die gefüllten Zellen auslesen.

    1. Wie gebe ich die Inhalte aber nun am elegantesten in den Zwischenspeicher?
    2. Da ich erfolglos versucht habe die Inhalte in ein Array zu schreiben(Myarr = Array(Cells(y, 4).Value)) und dieses auszugeben: wie würde das gehen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    HenryV schrieb:

    Einfacher geht es mit der Range.Copy-Methode
    Ja, logisch.
    Da hatte ich wohl einen Blackout.

    Mir fiel nur ein, dass ich mir irgendwann mal mit WinApi einen abbrechen musste.
    Aber das war, glaube ich, aus VBScript.
    Sorry für die Verwirrung.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo Zusammen,

    zunächst einmal vielen lieben Dank für die Ideen aber mit Range("D2:D31").Copy kopiere ich ja den gesamten Bereich incl. den leeren Zellen.
    Vielleicht habe ich mich in der Beschreibung missverständlich ausgedrückt. Ich will nur die mit den Werten der Formel gefüllten Zellen in den Clipboard schreiben,
    nicht die leeren Zellen. Deshalb ja auch der Frage 2. Teil bzgl. des Arrays. Wenn ich mit der .Copy methode durch den Bereich gehe und nur die gefüllten Zellen in eine Variable schreibe
    steht in der Variable WAHR anstatt die Werte(lasse ich die Variable weg ist lediglich der erste Wert im Clipboard)

    Visual Basic-Quellcode

    1. Sub Drivercopy()
    2. Dim y As Integer
    3. Dim Text As String
    4. For y = 2 To 31
    5. If Cells(y, 4).Value <> "" Then
    6. Text = Cells(y, 4).Copy
    7. End If
    8. Next
    9. Debug.Print Text
    10. End Sub


    Die im Eingangspost dargestellte Formel funzt. Der Debug.Print gibt nur die Werte der gefüllten Zellen wieder. Wie aber schreibe ich ALLE diese Werte des Bereichs dann in den Zwischenspeicher?
    So was?

    Visual Basic-Quellcode

    1. Union(Range("D2:D31").SpecialCells(xlCellTypeConstants), Range("D2:D31").SpecialCells(xlCellTypeFormulas)).Copy

    Wenn du nur Formeln oder nur Werte in den Zellen hast, kannst du das auch entsprechend abkürzen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Ja natürlich. Spalte sieht in etwa so aus(die Werte kommen aus der im Eingangspost stehenden Wenn-Formel). Ich brauche nun NUR die Werte um sie in andere Dateien eintragen zu können...
    Also eine Kopierfunktion die die "leeren" Zellen NICHT mit kopiert. Wie schon gesagt: wenn ich mit der For-Schleife durch den Bereich gehe zeigt die If-Verzweigung mit DebugPrint nur die Werte an.
    Mein Prob ist aber, dass ich die Liste(Wert1, Wert2, Wert 3, etc. ) im Zwischenspeicher benötige.

    Wert 1

    Wert 2
    Wert 3


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hipfzwirgel“ ()

    Dann musst du wirklich eine Hilfsspalte nehmen, da Word und Notepad einen nicht zusammenhängenden Excel-Range im PasteBuffer so nicht erkennt.

    Visual Basic-Quellcode

    1. ​Sub CopyFilledCells()
    2. Dim r As Long
    3. 'Range("H:H").ClearContents
    4. For Each c In Range("D2:D31")
    5. If Not IsEmpty(c) Then
    6. r = r + 1
    7. Range("H" & r).Value = c.Value
    8. End If
    9. Next
    10. If r > 0 Then Range("H1:H" & r).Copy
    11. End Sub
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    So, nach langem Testen geschafft auch ohne Hilfsspalte:

    die Schleife

    Visual Basic-Quellcode

    1. For y = 2 To 31
    2. If Cells(y, 4).Value <> " " Then
    3. ReDim Preserve MyArr(n)
    4. MyArr(n - 1) = Cells(y, 4).Value
    5. n = n + 1
    6. End If
    7. Next

    füllt das Array.
    Mit oData.SetText Join(MyArr, vbNewLine) und oData.PutInClipboard schreibe ich das Array in die Zwischenablage und kann den Inhalt dann beliebig weiterverwenden

    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()