Registriert seit: 31.07.2025
Version(en): MS Office LTSC Professional Plus 2021
01.08.2025, 23:56
(Dieser Beitrag wurde zuletzt bearbeitet: 01.08.2025, 23:57 von Schnattie.)
Hallo, ich bin's nochmal. Heute habe ich noch das letzte Problem in meiner Auswertungstabelle versucht zu lösen, leider ohne Erfolg. Erklärung: Ich habe eine Auswertungstabelle, die aus versch. Arbeitsblättern Daten zusammenfasst, zählt und berechnet. Das Ganze endet damit, dass ich mittels versch. Funktionen wie WENN, VERKETTEN, TEXT einen Text erzeuge, der das Auswertungsergebnis darstellt. Von dort muss ich diese Informationen via Copy&Paste extern weiterleiten. Dies ist nur so möglich, weil ich keine Dateianhänge oder individuelle Mails versenden kann, sondern ich habe nur die Möglichkeit, die Infos via einfachem Text-Chat (Fließtext ohne TAB Kontrolle etc.) zu kommunizieren. Aus Gründen der Übersichtlichkeit und besseren Lesbarkeit in diesem Chat enthält mein Text deshalb via ZEICHEN(10) gewollte Zeilenumbrüche an gezielten Stellen. Problem: Diese ZEICHEN(10) Zeilenumbrüche führen dazu, dass der kopierte Text im externen Chat (oder im Textpad, oder in Kurznotizen) am Anfang und am Ende ein " hat. Das ist für die Lesbarkeit sehr störend. Ohne ZEICHEN(10) passiert das nicht, jedoch ist der Text dann unübersichtlich und nicht gut lesbar. Nachfolgend habe ich das mal beispielhaft in einer Beispiel.xls reproduziert. Siehe erstes Blatt Textausgabebeispiel. Wenn man die rote Spalte (oder eine der Zellen) mit Strg+C/Strg+V in ein externes Eingabeprogramm (z.B. Kurznotiezen, Textpad etc) kopiert, kommen die "", bei der Spalte (bzw. den Zellen) nebenan passiert das nicht. Wie gesagt, aufgrund der Lesbarkeit benötige ich aber diese Zeilenumbrüche und möchte sie daher nicht entfernen.
Beispiel_member-era_build-era_TestDaten_korrektur.xlsx (Größe: 37,88 KB / Downloads: 10)
Kennt ihr das Problem? Hab ihr eine Lösung, wie ich diese Anführungszeichen beim Kopieren/einfügen vermeiden kann? dankeschön vorab LG Schnattie
Registriert seit: 12.08.2019
Version(en): Office 365
Hallo Schnattie,
vielleicht denke ich ja zu einfach, aber ... hast du schon versucht den Text mit Anführungszeichen ("bla") zuerst in einen Editor/notepad einzufügen und dann mit suchen nach " und ersetzen durch "nichts" zu entfernen? Das sollte gehen.
Gruß Sigi
Registriert seit: 12.07.2025
Version(en): 2021
Probier mal den Text mit CrLf statt nur Lf zu verbinden, sieht in Excel blöd aus, aber es kann sein das der andere Editor nur ein Lf nicht mag.
Wenn das nicht geht, dann musst Du mal schauen was wirklich in der Zwischenablage drin ist. Du wirst da kein " am Ende finden aber viele andere Strukturen. Die Frage ist welche davon nimmt der andere Editor zum Einfügen.
Kopier den Text von Excel erstmal nach Notepad, und dort kopierst Du den Text nochmal und dann fügst Du es in den anderen Editor. Wenn das geht, dann ist die Zwischenablage das Problem. In dem Fall brauchst Du ein Makro was den Text in die Zwischenablage kopiert.
Andreas.
Registriert seit: 22.11.2019
Version(en): 365
02.08.2025, 10:03
(Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2025, 10:13 von volti.)
Hallo, falls das Problem nicht schon anderweitig schon gelöst ist.... Es gäbe die Möglichkeit, die Anführungszeichen nach dem Kopieren direkt in der Zwischenablage per Makro zu löschen, bevor der Text woanders wieder eingefügt wird. Grundlage ist mein Beitrag hier: https://www.clever-excel-forum.de/Thread...e-kopierenNach einem Test musste ich feststellen, dass es offensichtlich nicht am Format in der Zwischenablage liegt. Excel hält nach dem Kopieren zahlreiche Formate in der Zwischenablage bereit. Der o.a. Code macht daraus einen eindeutigen Nur-Text. Dort sind die Anführungszeichen aber trotzdem enthalten. Deshalb entfernt der nachfolgend gezeigte angepasste Code alle Anführungszeichen. Wenn nicht alle wegdürfen, müsste der Code nochmal angepasst werden. Du kannst selbst kopieren und den Code laufen lassen oder auch den Kopiervorgang an sich vom Programm machen lassen. Probiere es mal aus.... 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(Optional 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 If Not Rng Is Nothing Then 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 sCliptext = Replace(sCliptext, Chr$(34), "") 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 TestMitCopy() KopiereRangeAlsText Range("B1:B5") End Sub
Sub TestOhneCopy() KopiereRangeAlsText End Sub
_________ viele Grüße Karl-Heinz
Hallo Andreas, ergänzend: Wenn das nicht geht, dann musst Du mal schauen was wirklich in der Zwischenablage drin ist. Du wirst da kein " am Ende finden aber viele andere Strukturen. Die Frage ist welche davon nimmt der andere Editor zum Einfügen. Dem ist nicht so. Nach dem Kopieren so eines Feldes sind bereits die Anführungszeichen in der Zwischenblage vorhanden.... GrußKH
Registriert seit: 12.07.2025
Version(en): 2021
02.08.2025, 10:41
(Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2025, 10:44 von Andreas Killer.)
Hallo Karl-Heinz, okay, hast mich erwischt, ich hab mir das nicht vorher angeschaut. Aber nun doch.  Ja, bei einigen Datentypen sind die "" schon drin, bei RTF z.B. nicht. Um nur den Text in die Zwischenablage zu kriegen hab ich was einfacheres. In VBA einen Verweis zu Microsoft Forms setzen. Code: Sub Test() Dim MyData As New DataObject MyData.SetText ActiveCell MyData.PutInClipboard End Sub
Aber Dein Code ist schon okay, er bietet zumindest die Möglichkeit zu prüfen ob man auf die Zwischenablage zugreifen kann, auch wenn Du das nicht machst. Ich verwende so was ähnliches auch, funktioniert unter realen Bedingungen besser. Das DataObject ist da nicht soo zuverlässig, das funktioniert manchmal einfach nicht. Andreas.
Registriert seit: 22.11.2019
Version(en): 365
Hallo Andreas, vielen Dank für Deinen Beitrag. Der Code ist mir bekannt. Und tatsächlich hat der Text aus der aktiven Zelle bei mir keine Anführungszeichen. Hätte ich nicht erwartet und auch keine Erklärung dafür, warum mal mit und mal ohne. Das Problem wäre also hiermit schon gelöst. Man braucht allerdings einen Verweis und man hört in den Foren immer wieder vom ??-Problem. Beides natürlich einfach lösbar. Aber dieses hier (mehrere Zellen kopieren) Code: Sub Test() Dim MyData As New DataObject MyData.SetText Range("B1:B10").Value MyData.PutInClipboard End Sub
führt zum Fehler "Typen unverträglich". Klappt bei mir zumindest nicht. Und wenn man vorher von Hand kopieren möchte, kann man diesen einfachen Code auch nicht einsetzen. Gruß Karl-Heinz
Registriert seit: 31.07.2025
Version(en): MS Office LTSC Professional Plus 2021
02.08.2025, 11:18
(Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2025, 11:19 von Schnattie.)
wow, ich danke Euch mal für eure Antworten. Das scheint ja wohl häufiger aufzutreten. Nunja, leider sind meine VBA Kenntnisse nur rudimentär. Die Originaltabelle ist zudem recht umfangreich. Zudem enthalten die zu kopierenden Zellen auch Smilies (um gute und schlechte Ergebnisse zu visualisieren). Ja, das ist etwas "verspielt", macht sich aber in meinem Fall, wo die Daten ja in einem Chat laden, echt schick. Doch in der Beispieldatei seht ihr ja, dass ZEICHEN(10) das Problem verursacht. Es liegt also nicht an sonstigen Inhalten der Zellen, die ich da rauskopiere. Ich traue mich nicht recht, in die Originaltabelle einen VBA Code einzubetten, den ich nur rudimentär verstehe .... Trotzdem habt ihr mir noch hilfreiche Impulse gegeben. Danke dafür.
(02.08.2025, 08:48)Andreas Killer schrieb: Probier mal den Text mit CrLf statt nur Lf zu verbinden, sieht in Excel blöd aus, aber es kann sein das der andere Editor nur ein Lf nicht mag. Was meinst Du mit CrLf statt nur Lf??
(02.08.2025, 07:19)Sigi.21 schrieb: zuerst in einen Editor/notepad einzufügen und dann mit suchen nach " und ersetzen durch "nichts" zu entfernen? Das sollte gehen.
Gruß Sigi Das ist eine super Idee. Danke
Registriert seit: 12.04.2014
Version(en): Office 365
(02.08.2025, 11:01)volti schrieb: Und tatsächlich hat der Text aus der aktiven Zelle bei mir keine Anführungszeichen. Hätte ich nicht erwartet und auch keine Erklärung dafür, warum mal mit und mal ohne. Ich hätte die Vermutung dass das nur bei den nicht druckbaren Zeichen (Steuerzeichen) passiert.
Wir sehen uns! ... Detlef
Meine Beiträge können Ironie oder Sarkasmus enthalten.
Registriert seit: 22.11.2019
Version(en): 365
02.08.2025, 11:38
(Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2025, 12:16 von volti.)
Hallo zusammen,
habe aus Interesse gerade mal etwas rumgespielt.
Die Zeichen 13 und 10, vbCr und vbLF verursachen das Problem. Andere nicht druckbare Zeichen unter 32 wie Zeichen 12 oder 26 und weitere bleiben davon unberührt.
Die Kombination vbCrLf, Zeichen(13)&Zeichen(10), verbessert daher m.E. nichts.
Ich denke mal, Excel will die Zelle als Datensatz bzw. als Ganzes erhalten. Wenn dort Umbrüche drin sind, werden im Texteditor ja so zu sagen wieder mehrere "Datensätze" daraus.
Gruß KH
Meine Meinung zur Ursache des Problems: Verantwortlich ist die Kopierfunktion von Excel. Das betrift sowohl manuelles Kopieren wie auch den VBA-Copy-Befehl.
Nutze ich das Kopieren via DataObject sind keine Anführungszeichen drin. Kopiere ich die Zelle über die API sind auch keine drin. Diese beiden Kopiermethoden haben ja primär nix mit Excel zu tun.
Registriert seit: 18.10.2020
Version(en): 365
02.08.2025, 11:56
(Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2025, 11:56 von Warkings.)
|