Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1548to1552
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zwischenspeicher auslesen macht Laufzeitfehler

Zwischenspeicher auslesen macht Laufzeitfehler
29.03.2017 00:02:48
Barbaraa

Hallo
würde gerne den Inhalt der Zwischenablage in einer Variablen speichern.
Dazu wird eine Schleife durchlaufen, bis sich die Zwischenablage füllt.
Ich starte das Programm, gehe in ein anderes Fenster, markiere dort einen Text, bringe ihn mit Strg+c in die Zwischenablage.
Und da unterbricht das Makro mit der Fehlermeldung:
Laufzeitfehler -2147221040 (800401d0)
Automatisierugsfehler
OpenClipboard fehlgeschlagen
"On Error Resume Next" führt das makro zu Ende, aber erst nach einer halben Minuten bangen Wartens. Das ist also auch nicht die Lösung.
Hier der Code:

Private Sub Test()
Dim oZwischenspeicher As New DataObject
Dim Text
oZwischenspeicher.SetText "zqba"
oZwischenspeicher.PutInClipboard
Do
oZwischenspeicher.GetFromClipboard
Text = oZwischenspeicher.GetText
Loop Until Text <> "zqba"
Cells(1, 1) = Text
End Sub

Meine Google-Recherche führt leider auch zu keiner für VBA-Anfänger nachvollziehbaren Lösung.
Kann mir da wer helfen?
LG, Barbara

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Endlosschleife
29.03.2017 07:45:16
RPP63
Moin!
Zunächst mal brauchst Du ja einen Verweis auf MS Forms 2.0 Object Library, dann kommt es auch zu keinem Automatisierungsfehler.
Viel wichtiger ist aber Dein Logikfehler!
"Text" (schlecht gewählte Variablenbezeichnung!) ist bereits zu Beginn mit "zqba" gefüllt.
Du lässt die Schleife laufen bis es <> "zqba" ist???
Gruß ralf
AW: Endlosschleife
29.03.2017 19:08:11
Barbaraa
Hi Ralf,
der Verweis auf MS Forms 2.0 Object Library war und ist gesetzt.
"Text", ok, schlecht gewählte Variablenbezeichnung, dennoch:
ja, ich lasse die Schleife laufen bis es <> "zqba" ist, genau gesagt, wenn ich händisch irgendwo mit Strg+c einen Text in die Zwischenablage fülle. Dieser soll dann in die A1-zelle kommen (wie schon eingangs beschrieben).
Da sehe ich keinen Logikfehler.
LG,
Barbara
Anzeige
Ich aber schon, und jetzt?
29.03.2017 19:18:53
RPP63
Hi Barbara!
Lasse mal den Code per F8 steppen und schaue Dir im Lokalfenster die Variablenbelegung an.
Dass ein händisches Strg+c kein VBA-Event auslöst, weißt Du?
Mal abseits der (Programm-) Logik habe ich keinen blassen Schimmer, was Du erreichen willst.
Gruß Ralf
P.S.: Ich lasse dennoch nicht auf offen.
AW: Ich aber schon, und jetzt?
29.03.2017 20:32:32
Barbaraa
Hi Ralf,
Die schrittweise Ausführung mit F8 funktioniert problemlos, genauso wie es sein soll: Wenn ich während der Scheife in ein offenes pdf gehe und dort ein Wort mit Strg+c in die Zwischenablage bringe, wird beim Loop Until die Do-Schleife verlassen.
Hast Du meinen Code mal ausprobiert?
Nur im Run-Modus F5 kommt die Fehlermeldung, sobald ich Strg+c mache. Außer, ich kopiere einen Wert aus einer anderen Excel-Datei in einer eigenen Instanz. Da funktioniert auch das Makro mit F5. Aber das ist ja nicht Zweck des Makros.
Die Variablenbelegung zeigt Folgendes:
oZwischenspeicher ist vom Typ DataObject,
die nächste Zeile, die einzige zugehörige Variable zu oZwischenspeicher zeigt als Wert und keinen Typ.
Ja, ich weiß, dass ein händisches Strg+c kein VBA-Event auslöst. Auf das wird ja auch nicht abgezielt, sondern auf eine Änderung in der Zwischenablage.
Meine gesetzten Verweise:
Visual Basic for Applications
Microsoft Excel 14.0 Object Library
Microsoft Forms 2.0 Object Library
OLE Automation
Microsoft Office 14.0 Object Library
Microsoft Scripting Runtime
Was ich mit meinem Makro erreichen will, habe ich ja schon beschrieben: Den Text der Zwischenablage, sobald ich sie gefüllt habe, ins Excel zu bringen, mit dem großen Ziel, alle Formulareinträge eines vba-Formulars ins Excel zu bringen und dort weiter zu bearbeiten.
LG, Barbara
Anzeige
AW: Ich aber schon, und jetzt?
30.03.2017 13:12:59
EtoPHG
Hallo Barbara,
Das Clipboard ist ein Biest.
Versuch's mal so (in ein Modul):
Option Explicit
Dim textFromClipboard As String
Sub WaitForTextInClipboard()
Dim LX As Long
Dim clipTest As New DataObject
textFromClipboard = ""
clipTest.SetText textFromClipboard
clipTest.PutInClipboard
On Error Resume Next
Do
clipTest.GetFromClipboard
If clipTest.GetFormat(1) Then
textFromClipboard = clipTest.GetText
If Len(textFromClipboard) > 0 Then Exit Do
End If
DoEvents
Loop While textFromClipboard = ""
On Error GoTo 0
Set clipTest = Nothing
End Sub
Sobald ein Text in der Zwischenablage vorhanden ist, beendet die Routine und die dieser staht dann in der Variablen textFromClipboard zur weiteren Codeverarbeitung zur Verfügung.
Gruess Hansueli
Anzeige
Dim LX as Long: Codezeile löschen (owT)
30.03.2017 13:49:23
EtoPHG

AW: Dim LX as Long: Codezeile löschen (owT)
31.03.2017 19:07:08
Barbaraa
Mit
On Error Resume Next
geht es.
Habe auch einen Schreifenzähler eingebaut. Mal wird die Schleife 20 Mal durchlaufen, mal 40 Mal, ganz unterschiedlich.
Aber es geht.
Vielen Dank.
LG, Barabra

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige