Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Nur Text in die Zwischenablage (mehrere Zellen)

Nur Text in die Zwischenablage (mehrere Zellen)
31.07.2024 11:45:35
Stefan
Hallo Excel-Freunde,

ich verzweifel an einem denke ich kleinen Problem ...

Ich möchte in einer Excel Tabelle einen Bereich (Spalte A) in die Zwischenablage kopieren, um es in einem anderen Programm weiter zu verarbeiten - OHNE Formatierungen.
Dazu habe ich hier bereits einen tollen Ansatz von Nepumuk gefunden:



Private Sub Einweisung_Click()
Dim objClipBoard As Object
ActiveSheet.Calculate
Set objClipBoard = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Call objClipBoard.SetText(Range("B34").Text)
Call objClipBoard.PutInClipboard
Set objClipBoard = Nothing
End Sub


Aber das funktioniert bei mir immer nur mit dem Bezug einer Zelle (im Beispiel die B34) - sobald ich den Bereich auf A:A oder auch A1:A10 setze funktioniert es nicht mehr.

Was mache ich denn da falsch? Wie muss der Code lauten wenn ich die komplette Spalte A kopieren möchte?

Vielen Dank für eure Hilfen.
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nur Text in die Zwischenablage (mehrere Zellen)
31.07.2024 12:06:31
daniel
Hi

vielleicht so:

Call objClipBoard.SetText(Worksheetfunction.TextJoin(vbLF, 1, Range("A:A"))

vbLF ist das zeichen für den Zeilenumbruch.
ggf brauchst du auch vbCR oder vbCrLf, das hängt von einem Programm ab.

Gruß Daniel
AW: Nur Text in die Zwischenablage (mehrere Zellen)
31.07.2024 12:31:25
volti
Hallo Stefan,

hier ist noch eine Idee.... (Zu Fuß)

Code:


Private Sub Einweisung_Click() Dim objClipBoard As Object, oZell As Range, sText As String, iOldZl As Long ActiveSheet.Calculate Set objClipBoard = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") For Each oZell In Range("B12:D15") If iOldZl = 0 Then iOldZl = oZell.Row If oZell.Row <> iOldZl Then sText = sText & vbLf: iOldZl = oZell.Row End If sText = sText & oZell.Value & vbTab Next oZell sText = Left$(sText, Len(sText) - 1) Call objClipBoard.SetText(sText) Call objClipBoard.PutInClipboard Set objClipBoard = Nothing End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
Anzeige
AW: Nur Text in die Zwischenablage (mehrere Zellen)
31.07.2024 19:38:04
volti
Hallo Stefan,

Dein Anliegen ist ja durch Daniels Vorschlag und auch durch meine Version wohl gelöst.

Da ich das Thema aber schon oft gelesen habe, habe ich mich entschlossen, mal eine entsprechende API-Version zu programmieren.
Diese stelle ich allen Interessierten hier zur Verfügung.

Die API-Version dürfte bei größeren Datenmengen deutlich schneller sein, als meine Schleifenversion.
Außerdem hat sie nicht das "Zwei Sonderzeichen"-Problem. Forenkenner wissen was ich damit meine. :-)

Der etwas längere Code ist m.E. unerheblich, da er ja kopiert werden kann und nicht abgeschrieben werden muss.

PS: Ich habe es nur kurz getestet, hoffe aber, dass es allen Situationen standhält.

Code:


Option Explicit Private Declare PtrSafe Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _ ByVal dwBytes As LongPtr) As LongPtr Private Declare PtrSafe Function GlobalLock Lib "kernel32" ( _ ByVal hMem As LongPtr) As LongPtr Private Declare PtrSafe Function GlobalSize Lib "kernel32" ( _ ByVal hMem As LongPtr) As LongPtr Private Declare PtrSafe Function GlobalUnlock Lib "kernel32" ( _ ByVal hMem As LongPtr) As Long Private Declare PtrSafe Function lstrcpy Lib "kernel32" ( _ ByVal lpString1 As Any, ByVal lpString2 As Any) As LongPtr Private Declare PtrSafe Function IsClipboardFormatAvailable Lib "user32" ( _ ByVal wFormat As Long) As Long Private Declare PtrSafe Function SetClipboardData Lib "user32" ( _ ByVal wFormat As Long, ByVal hMem As LongPtr) As LongPtr Private Declare PtrSafe Function GetClipboardData Lib "user32" ( _ ByVal wFormat As Long) As LongPtr Private Declare PtrSafe Function OpenClipboard Lib "user32" ( _ ByVal hWnd As LongPtr) As Long Private Declare PtrSafe Function CloseClipboard Lib "user32" () As Long Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long Function KopiereRangeAlsText(Rng As Range) As String ' Kopiert eine Excelrange in die Zwischenablage und hält sie dort als Text Dim hMem As LongPtr, lpGMem As LongPtr, sCliptext As String, i As Long Const CF_TEXT As Long = 1 Rng.Copy DoEvents If IsClipboardFormatAvailable(CF_TEXT) > 0 Then ' Daten vorhanden? For i = 1 To 2 OpenClipboard 0& ' Zwischenablage öffnen If i = 1 Then hMem = GetClipboardData(CF_TEXT) ' TEXT aus Zwischenablage If i = 2 Then hMem = GlobalAlloc(&H42, Len(sCliptext)) ' Speicher reservieren If hMem > 0 Then lpGMem = GlobalLock(hMem) ' Speicher blockieren If i = 1 Then sCliptext = Space(CLng(GlobalSize(hMem))) ' Platz reservieren lstrcpy sCliptext, lpGMem ' Daten kopieren GlobalUnlock hMem ' Speicher freigeben EmptyClipboard ' Zwischenablage leeren Else lpGMem = lstrcpy(lpGMem, sCliptext) ' Daten kopieren If GlobalUnlock(hMem) = 0 Then _ SetClipboardData CF_TEXT, hMem ' TEXT in Zwischenablage End If End If CloseClipboard ' Zwischenablage schließen Next i End If End Function ' ############################################### Sub Test() KopiereRangeAlsText Range("A1:C100") End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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