Excel nur Zelleninhalt in Zwischenspeicher. Profis gefragt?
Hallo,
Ich lasse in Excel (Excel 2019) auf Knopfdruck ein Makro laufen.
Es ist eigentlich ganz simple: Es schreibt "ok" in die aktive Zelle, kopiert die linke Zelle und springt dann wieder ein runter und ein nach rechts.
Private Sub CommandButton3_Click()
Range(ActiveCell, ActiveCell.Offset(2, 0)) = "ok"
ActiveCell.Offset(0, -1).Select
Range(ActiveCell, ActiveCell.Offset(2, 0)).Copy
ActiveCell.Offset(3, 1).Select
End Sub
Das was ich nicht hinkriege:
Es wird leider die gesamte Zelle kopiert. Wenn ich die Zelle irgendwo anders einfüge wird die gesamte Zelle mit Rahmen und anderen Formatierungen eingefügt.
Nun die Frage: Kann ich anstatt die gesamte Zelle auch nur den Zelleninhalt, also nur die Schrift ohne jegliche Formatierungen kopieren lassen? Ich brauche es in den Zwischenspeicher, sodass ich es wo anders in einem Browser mit STRG+V einfügen kann.
Vielen Dank im Voraus
3 Antworten
Ich denke am einfachsten geht das über einen kleinen Umweg. Such Dir einen Bereich der weit außerhalb Deiner Tabellen liegt, im Beispiel "X1:X3" und kopiere nur die Werte dorthin. Dann kopierst Du diesen Bereich. Das Screenupdating habe ich ausgeschaltet, damit nicht zu diesem Bereich gesprungen wird.
Private Sub CommandButton3_Click()
On Error GoTo ErrorHandler
Dim rngZelle As Range
Application.ScreenUpdating = False
Range(ActiveCell, ActiveCell.Offset(2, 0)) = "ok"
ActiveCell.Offset(0, -1).Select
Range(ActiveCell, ActiveCell.Offset(2, 0)).Copy
Set rngZelle = ActiveCell
Range("X1:X3").PasteSpecial (xlPasteValues)
Range("X1:X3").Copy
rngZelle.Offset(3, 1).Select
ErrorHandler: Application.ScreenUpdating = True
End Sub
Hilft Dir das?
Das hatte ich auch so verstanden.
Allerdings bin ich der Meinung das mein Code genau DAS macht.
Es werden nur die Werte des ausgewählten Bereiches nach "X1:X3" kopiert und dann wird "X1:X3" kopiert, wo ja keinerlei Formatierung vorhanden ist. Da kann kein Rahmen mit kopiert werden.
Ich verstehe nicht, warum das bei Dir nicht klappt.
Das klappt im allgemeinen.
Also wenn ich es in Word eingebe, dann ist auch alles in Ordnung, nur der Text wurde markiert. Jedoch gebe ich es in einem Browser in einer E-Mailvorlage ein, welches mit HTML geschrieben wurde. Hier fügt er leider einen Rahmen hinzu. Kopiere ich den Text manuell gibts kein Rahmen, kopiere ich über Script, gibts ein Rahmen.
Strange...
Ich habe das gerade nochmal bei mir getestet und kann Dein Problem nicht nachvollziehen.
Bei mir werden in der eMail sauber nur die drei Werte untereinander eingefügt, wenn ich z.B. STRG & V drücke. Ich kann mir auch absolut nicht vorstellen, woher da ein Rahmen kommen soll, denn um X1:X3, das kopiert wurde, ist ja keiner.
Daher kann ich Dir jetzt wohl leider nicht mehr weiterhelfen.
Hallo,
danke für deine Nachricht und deine Hilfsversuche.
Um es nachzuvollziehen kannst du folgendes machen:
https://html-online.com/editor/
Geh bitte auf diese Seite. Hier siehst du rechts den HTML Code und links das Ergebnis dessen.
- Leere bitte das linke Feld, also alles markieren und löschen (nicht zwingend nötig).
- Nun kannst du einmal in Excel eine Zelle anklicken und den Text oben manuell rauskopieren. Alternativ halt Doppelklick auf Zelle --> Text markieren --> Kopieren
- Füge nun diesen im HTML Editor (links! da es kein HTML Code ist) ein.
- Nun sollte nur der Text eingefügt worden sein.
Anschließend machst du bitte das gleiche mit deinem Script. Also den Kopiervorgang mit deinem Script und dann in das linke Feld der oben genannten Seite einfügen. Dann wirst du merken, dass dort noch der Zellrahmen eingefügt wird.
Nun sollte das Problem eindeutig sein. Für deine weitere Hilfe bin ich dir dankbar.
Gruß
Zusatz:
Du siehst dann auch rechts im HTML Code, dass die Tabellendaten mitkopiert wurden, da diese in HTML Code vorhanden sind. Auf dieser Seite klappt es zumindest wenn ich es mit STRG+SHIFT+V (also unformatiert) einfüge. Jedoch klappt es in meinem anderen Fall nicht. Dafür muss ich die Zelle in Excel komplett formatlos in die Zwischenablage kriegen.
Alles klar. Jetzt kann ich es nachvollziehen. Und ich habe auch eine Lösung, denke ich. Da musste ich zwar erstmal etwas "graben" und Alles "ummodeln", aber so sollte es klappen:
Private Sub CommandButton3_Click()
Dim oData As New DataObject
Dim strKopieren As String
Range(ActiveCell, ActiveCell.Offset(2, 0)) = "ok"
strKopieren = ActiveCell.Offset(0, -1).Value & _
vbCrLf & ActiveCell.Offset(1, -1).Value & vbCrLf & _
ActiveCell.Offset(2, -1).Value
With oData
.SetText strKopieren
.PutInClipboard
End With
End Sub
Falls Du (so wie ich zuerst) die Fehlermeldung:
Fehler beim Kompilieren
Benutzerdefinierter Typ nicht definiert
bekommst, musst Du erst noch folgendes machen:
Gehe im VBA-Editor auf:
Extras/ Verweise
und setze da ein Häkchen bei:
Microsoft Forms 2.0 Object Library
Danach sollte es funktionieren.
Klappt es?
Lang ist es her.
Ich habe es nun endlich erprobt.
Jedoch funktioniert es nicht.
Hast du es erprobt gehabt?
Ja, das war mit Sicherheit von mir getestet.
Und "funktioniert nicht" ist die mit Abstand schlechteste Beschreibung eines auftretenden Fehlers. Also:
WIE funktioniert es nicht? Welche Fehlermeldung? Welches, warum, falsches Ergebnis? Usw.
Vielen Dank für deine Rückmeldung.
Das kopierte (z.B. eine Zahl) wird als " " oder als "??" ausgegeben.
Ich habe mir jetzt nochmal den oben geposteten Code auf einen Button gelegt. Wenn ich den drücke wird ok in drei Zellen geschrieben und die Werte links neben diesen Zellen werden in die Zwischenablage kopiert. Dann kann ich z.B. eine beliebige Zelle auswählen und mit Strg&V diese Werte einfügen. Oder das Ganze auch in Word einfügen. Klappt, egal ob Zahl oder Text.
Also kann ich Dein Problem leider nicht nachvollziehen und daher auch schlecht lösen. Vor allem verstehe ich nicht, wo die ?? herkommen sollen. Die müssen doch irgendwo gestanden haben, sonst hätten sie ja nicht kopiert werden können.
Erstmal ein riesen Dank für deine Hilfe.
Ich habe es nun mit einer neuen Excel Datei erprobt. Es geht leider nicht.
In den folgenden Bildern kannst du das Resultat bei mir sehen:
https://1drv.ms/u/s!ApmsOpg-H9KV22fO1fdR1pSRucxV?e=g8P8kx
https://1drv.ms/u/s!ApmsOpg-H9KV22gmp3hClQuKNDbf?e=VZc5Fu
Hier kannst du auch gerne meine Testdatei runterladen:
https://1drv.ms/x/s!ApmsOpg-H9KV22awP4eV7tZo76Fz?e=DAZwvW
Gern kannst du mit mir auch deine Datei teilen. Ich verstehe nicht warum es bei dir funktioniert. Ich bekomme absolut keine Fehlermeldungen angezeigt.
Tja, jetzt wird es ganz komisch.
Ich habe Deine Datei runtergeladen und bei mir in Excel geöffnet und sie funktioniert einwandfrei.
Ich bekomme die drei Zahlen links von der aktiven Zelle in die Zwischenablage kopiert und kann die dann einfügen wo ich will und bekomme diese Zahlen auch genau so in drei Zellen untereinander (oder in WORD in drei Zeilen) ausgegeben.
Wie rufst Du denn die Zwischenablage ab?
Versuche mal alle Möglichkeiten:
STRG & V
"Nur den Text übernehme"
Inhalte einfügen/ Unicode-Text
Inhalte einfügen/ Text
Hast Du auch mal versucht, das woanders einzufügen, in WORD oder im Browser oder sonstwo? Oder mal eine andere Schriftart im Zielbereich?
Klappt bei mir (Excel 2019) alles.
Oh nein.... :(
Ich habe es auf einem anderen PC erprobt. Da funktioniert es. Warum geht es denn bei mir nicht. Hast du irgendeine Idee? Oder muss ich mein Office 2019 neu installieren und erneut probieren?
Ich habe es gerade auf dem anderen Rechner nochmal erprobt.
Nun geht es da auch nicht. Ganz komisch.
Kannst du die Datei bei dir verändern, abspeichern, schließen, erneut öffnen und dann nochmal erproben ob es funktioniert?
Habe ich gerade alles gemacht. Klappt immer, egal, was ich anstelle.
Ich habe absolut keine Idee, woran das bei Dir liegen könnte.
Hallo Abdun!
Die Offset-Schreibweise ist mit unsympathisch, ich habs mit meiner Methode hingekriegt.
Sub Kopieren()
Zeile = Selection.Row
Spalte = Selection.Column
Cells(Zeile, Spalte) = "ok"
Cells(Zeile, Spalte - 1).Copy
Range("X1").Select ' eine beliebige unformatierte Zelle
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Selection.Copy
Cells(Zeile, Spalte).Select
End Sub
Hi,
danke für deine Unterstützung, jedoch ist dies nicht die Lösung, da der Zellrahmen miteingefügt wird. (Aber nur im Browser im Word oder wo anders wird der Zellrahmen nicht mit eingefügt).
Denn ich brauche den Inhalt der Zelle einfach als Wert im Zwischenspeicher. Ohne dass die Zellenrahmen oder sonstwas mitkopiert wird.
Hier packe ich mal ein Bild rein, damit es eindeutig ist.
Danke
Grundsätzlich kann man auch 'nur' den Wert pasten.
Zeichne ein Makro auf wo du anstatt STRG-C. ins Menu ->Einfügen öffnest und dort explizit "Werte" auswählst (oder nach dem anwählen der Zielzelle mit "rechtem Maus-Klick die Kachel für's einfügen wählst die "123" als Icon hat.
Dann schau dir den Makro Code an.
.PasteSpecial bla bla
Danke für deine Antwort.
Jedoch möchte ich den zu kopierenden Text Formatlos in den Zwischenspeicher kopieren, da ich es manuell in einem Browser mit STRG+V einfügen muss.
Also die Möglichkeit bei Excel, es formatlos einfügen zu können, bringt mir an der Stelle nicht viel.
Trotzdem Danke für deine Bemühung.
Schau mal hier:
https://www.thespreadsheetguru.com/blog/2015/1/13/how-to-use-vba-code-to-copy-text-to-the-clipboard
Ich selbst habe zunächst mit dem ersten Ansatz die meisten Dinge gelöst, aber da ist man auf 64kByte Daten limitiert, wenn ich es noch richtig weiß. Dann bin ich auf den zweiten Ansatz "Windows API" umgeschwenkt. Voila keine Probleme mehr die letzten 10 Jahre.. auch der Wechsel auf 64bit Rechner konnte entsprechend ergänzt werden.
Hi,
danke für deine Unterstützung, jedoch ist dies nicht möglich.
Denn ich brauche den Inhalt der Zelle einfach als Wert im Zwischenspeicher. Ohne dass die Zellenrahmen oder sonstwas mitkopiert wird.
Hier packe ich mal ein Bild rein, damit es eindeutig ist.
Danke
https://www.directupload.net/file/d/5728/m4n4no4q_png.htm][IMG]https://s19.directupload.net/images/200213/temp/m4n4no4q.png