AW: Code-Reihenfolge 2. "Leeren" ist schneller als 1. "Kopieren"
xlKing
Hallo Thorsten,
ich hab hier noch nicht geantwortet, weil ich mich erst mal intensiv mit dem Problem beschäftigt habe. So wie es aktuell scheint, wird der Text innerhalb der Zwischenablage angepasst. Range.Copy kopiert erstmal eine Zelle mit allem drum und dran in die Zwischenablage. Das kann man mit der API-Funktion IsClipboardFormatAvailable gut prüfen. In der Zwischenablage befinden sich dann, die Formate 2,8,17,5,129 (bzw. &H81), 14, 16, 3, 7, 4, 1 und 13) Die 1 steht dabei für Text. Definition der anderen Formate siehe hier:
https://learn.microsoft.com/en-us/windows/win32/dataxchg/standard-clipboard-formats
Wenn ich den Text ohne vorheriges Löschen der Spalte S irgendwo einfüge ist er auch korrekt. Durch das Löschen wird jedoch die Formel aktualisiert (könnte man mit
Application.Calculation = xlCalculationManual
verhindern) womit der Text in der Zwischenablage sich ebenfalls aktualisiert. Es wird also offenbar nur eine Verknüpfung zur Zelle kopiert. Um solche Probleme zu verhindern setzen andere Range-Eigenschaften wie .ClearContents oder .Value den Cutcopymode auf False, weshalb man nach Änderung von Daten grundsätzlich neu Kopieren muss. Bei .Formula-Eigenschaft wurde diese Zusatzfunktion offenbar vergessen. (Bug im VBA???).
So wie ich das sehe, bleiben dir drei Möglichkeiten. Entweder du fügst vor dem Löschen der Spalte S deinen Text per Code in Outlook ein. Da können dir hier Andere behilflich sein. Ich habe leider kein Outlook um zu testen.
Oder du bleibst bei deinem bisherigen Schema und schmeist deinen Text über API in die Zwischenablage. Schau dir dazu mal den Code von Karl-Heinz an.
https://www.vba-forum.de/View.aspx?ziel=62728-String_in_Zwischenablage_kopieren. anstatt "Teste mich" brauchst du dann einfach Range("AG5").Text zu nehmen. Probiers mal aus.
Gruß Mr. K.