VBA ClipBoard (API) für 32- und 64-Bit
05.01.2025 16:51:54
Joschi Witchcraft
Bisher hatte ich Excel mit Markos nur auf meinem PC mit Windows 10 und Office 365 im 32-Bit-Mode eingesetzt. Nun möchte ich meine Makros auf auf dem Laptop mit Windows 11 und Office 365 im 64-Bit-Mode lauffähig machen. Dank der Unterstützung durch dieses Forum wurde ein großes Problem bereits gelöst,
Mein Aktuelles Problem: ClipBoard (API).
Meinen alten Code habe ich auf der Basis von Beispielen im Internet soweit lauffähig bekommen, dass das Setzen und Löschen von Daten im ClipBoard auf dem alten PC seit Jahren problemlos funktioniert.
Nun habe ich versucht, eine Version zu erstellen, welche auf beiden Systemen mit demselben Code lauffähig ist.
Auf dem 32-Bit-System habe ich das Problem, dass ich vom gespeicherten String immer nur das erste Zeichen erhalte; die Länge des Strings wird allerdings richtig bereitgestellt. Trotz intensiver Suche konnte ich die Ursache nicht finden.
Wenn ich für den Test auf dem 32-Bit-System meinen alten Code einsetze, erhalte ich den gespeicherten String komplett zurück.
Meine beiden Versionen habe ich als getrennte Text-Files bereitgestellt. Bei der alten Version habe ich den Namen der Funktion jeweils ein "Old" vorangestellt, so dass beide Versionen durcheinander verwendet werden können.
Neuer Code: https://www.herber.de/bbs/user/174673.txt
Alter Cide: https://www.herber.de/bbs/user/174674.txt
Mein Aufruf:
Sub Starten()
ClipBoardCut "Das ist ein Test " & Time()
Debug.Print ">" & ClipBoardPaste & ""
Debug.Print ">" & OldClipBoardPaste & ""
ClipBoardCut vbNullString
Debug.Print "Clipboard gelöscht"
Debug.Print ">" & ClipBoardPaste & ""
OldClipBoardCut "Das ist ein Old-Test " & Time()
Debug.Print ">" & ClipBoardPaste & ""
Debug.Print ">" & OldClipBoardPaste & ""
End Sub
Ich hoffe, dass sich jemand findet, welcher mein Problem unter 32-Bit lösen kann.
Beim Test auf dem 64-Bit-Rechner wurde die Definition
#If Win64 Then
Dim iStrPtr As LongPtr
beanstandet.
Ich habe das nachträglich auf "Long" geändert. Allerdings bekomme ich einen weiteren Fehler "Typen unverträglich" in der Zeile mit dem Inhalt "ClipText = String$(iLen \ 2& - 1&, vbNullChar)" .
Nachdem ich auch ILen als Long definiert hatte, bekam ich in der genannten Zeile einen Laufzeitfehler 5
Es sieht so aus, dass ich - wieder einmal - auf externe Hilfe angewiesen bin.
Natürlich musste für den Test auf dem 64-Bit-System der alte Code entfernt werden. Aber das brauche ich den Profis nicht sagen,
Gruß Joschi
Anzeige