Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Übergehen: Laufzeitfehler '-2147221404(80040064)'

Forumthread: Übergehen: Laufzeitfehler '-2147221404(80040064)'

Übergehen: Laufzeitfehler '-2147221404(80040064)'
25.05.2009 19:29:35
Lenni
Moin Excellianer!
Mit folgendem Code für ein UserForm wurde mir hier im Forum vor einigen Wochen geholfen. Es handelt sich um die Möglichkeit, dass bei Click auf CommandButton5 der zuvor "befüllte" Zwischenspeicher des Rechners in eine TextBox2 geschrieben wird.

Private Sub CommandButton5_Click()
Dim objDataObject As DataObject
Set objDataObject = New DataObject
objDataObject.GetFromClipboard
TextBox2.Text = objDataObject.GetText
Set objDataObject = Nothing

Das klappt soweit auch super gut... ...nur wie sich jetzt erst herausgestellt hat, wird mir bei einem leerem Zwischenspeicher folgende Fehlermeldung angezeigt: Laufzeitfehler '-2147221404(80040064)': DataObject:GetText Ungültige FORMATECT-Struktur
Gibt es eine Möglichkeit, eine Prüfung in den Code "einzubauen", dass z.B. eine MsgBox geöffnet wird mit dem Hinweis, dass der Zwischspeicher leer ist, bevor diese Fehlermeldung kommt (...die dann natürlich auch nicht mehr erscheinen soll!)?
Oder was mir auch schon reichen würde: Diese Fehlermeldung ignorieren bzw. zu übergehen und gleich den Cursor in die TextBox2 setzen (...dann zum manuellen befüllen!).
Ich bitte um Eure Hilfe! Vielen Dank!
Viele Grüße aus dem hohen Norden!
Lenni

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übergehen: Laufzeitfehler '-2147221404(80040064)'
25.05.2009 21:27:04
Nepumuk
Hallo Lenni,
versuch es mal so:
Option Explicit

Private Const CF_TEXT As Long = 1

Private Sub CommandButton5_Click()
    Dim objDataObject As DataObject
    Set objDataObject = New DataObject
    objDataObject.GetFromClipboard
    If objDataObject.GetFormat(CF_TEXT) Then TextBox2.Text = objDataObject.GetText
    Set objDataObject = Nothing
End Sub

Gruß
Nepumuk
Anzeige
AW: Übergehen: Laufzeitfehler '-2147221404(80040064)'
25.05.2009 21:27:43
dan
Hallo Lenni,
man kann Fehler abfangen, z.B. mit On Error GoTo.
In diesem Fall wenn man die Methode GetText des Data-Objektes ruft und der Data-Object beinhaltet keine Text-Data, dann kommt es zu dem Error -2147221404.
Fuer diese Methode wuerde ich eine Wrapper-Funktion benutzen. In dem Wrapper wird der Error abgefangen und behabdelt.
Mein Vorschlag sieht so aus:
Option Explicit

Private Sub CommandButton5_Click()
Dim objDataObject As DataObject
Set objDataObject = New DataObject
objDataObject.GetFromClipboard
' statt TextBox2.Text = objDataObject.GetText wird die wrapper-funktion gerufen:
TextBox2.Text = GetDataObjectText(objDataObject)
Set objDataObject = Nothing
End Sub



Private Function GetDataObjectText(ByRef io_DataObject As DataObject) As String
On Error GoTo Err_GetDataObjectText
GetDataObjectText = io_DataObject.GetText
Exit Function
Err_GetDataObjectText:
If (Err.Number = -2147221404) Then
' no information in the text-format in the clip board:
VBA.MsgBox "Kein Text in Zwischspeicher.", vbInformation, "Data-Object"
Else
VBA.MsgBox Err.Description, vbCritical, "Error in Function GetDataObjectText"
End If
End Function


Gruss dan, cz.

Anzeige
Vielen Dank Euch Zwei'en!!
25.05.2009 22:30:37
Lenni
Danke Nepumuk und Dan!!
Deinen Vorschlag, Nepumuk, habe ich mal kurz umgesetzt und er funktioniert!! Vielen Dank Nepumuk!
Deinen Vorschlag, Dan, werde ich mir morgen noch mal in Ruhe ansehen >> ...scheint auch ein sehr interessanter Ansatz zu sein. Auf alle Fälle gefällt mir die Möglichkeit mit der MsgBox.
Ich melde mich morgen noch mal!! Aber schon mal vielen Dank für Eure Hilfe!!
Gruß
Lenni

Anzeige
...ich wollte mich ja noch mal melden!!
26.05.2009 09:15:23
Lenni
....ob Deine Lösung Dan, auch funktioniert: Jooo! Sie läuft genau so perfekt wie Nepumuks Lösung!
Vielen Dank Dan!!
Gruß
Lenni

;
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler '-2147221404(80040064)' in Excel VBA übergehen


Schritt-für-Schritt-Anleitung

  1. Öffne dein Excel-Projekt und gehe zum VBA-Editor (ALT + F11).
  2. Füge ein UserForm hinzu und platziere einen CommandButton (benenne ihn z.B. CommandButton5).
  3. Füge den folgenden Code in das UserForm ein:
Private Sub CommandButton5_Click()
    Dim objDataObject As DataObject
    Set objDataObject = New DataObject
    objDataObject.GetFromClipboard

    If objDataObject.GetFormat(CF_TEXT) Then
        TextBox2.Text = objDataObject.GetText
    Else
        MsgBox "Der Zwischenspeicher ist leer.", vbInformation, "Information"
    End If

    Set objDataObject = Nothing
End Sub
  1. Teste den Code, indem du etwas in den Zwischenspeicher kopierst und den Button drückst. Achte darauf, wie die MsgBox erscheint, wenn der Zwischenspeicher leer ist.

Häufige Fehler und Lösungen

  • Laufzeitfehler '-2147221404(80040064)': Dieser Fehler tritt auf, wenn du versuchst, Text aus einem leeren Zwischenspeicher zu holen. Um dies zu vermeiden, stelle sicher, dass du die GetFormat-Methode verwendest, um zu prüfen, ob Text im Zwischenspeicher vorhanden ist.

  • Objekt nicht festgelegt: Überprüfe, ob das DataObject richtig gesetzt wurde. Du musst sicherstellen, dass du das Microsoft Forms 2.0 Object Library aktiviert hast.


Alternative Methoden

Eine alternative Lösung wäre die Verwendung einer Wrapper-Funktion, um den Fehler abzufangen und zu behandeln. Das sieht so aus:

Private Sub CommandButton5_Click()
    Dim objDataObject As DataObject
    Set objDataObject = New DataObject
    objDataObject.GetFromClipboard
    TextBox2.Text = GetDataObjectText(objDataObject)
    Set objDataObject = Nothing
End Sub

Private Function GetDataObjectText(ByRef io_DataObject As DataObject) As String
    On Error GoTo Err_GetDataObjectText
    GetDataObjectText = io_DataObject.GetText
    Exit Function

Err_GetDataObjectText:
    If (Err.Number = -2147221404) Then
        MsgBox "Kein Text in Zwischenspeicher.", vbInformation, "Data-Object"
    Else
        MsgBox Err.Description, vbCritical, "Error in Function GetDataObjectText"
    End If
End Function

Diese Methode bietet eine flexiblere Fehlerbehandlung und ermöglicht eine bessere Kontrolle über die Anwendung.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du das DataObject nutzen kannst:

  1. Text in den Zwischenspeicher kopieren:

    • Kopiere Text aus einem beliebigen Dokument und drücke dann den Button in deinem UserForm.
  2. Leeren Zwischenspeicher testen:

    • Lösche den Text aus dem Zwischenspeicher (z.B. durch Kopieren von Bildern oder leeren Texten) und drücke erneut den Button. Die MsgBox sollte erscheinen.

Tipps für Profis

  • Nutze die Option Explicit-Anweisung, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Laufzeitfehler zu vermeiden.
  • Überlege, ob du das gettext excel-Feature in deinen anderen Projekten verwenden kannst, um Text effizienter zu handhaben.
  • Erstelle eine benutzerdefinierte Funktion, die dir hilft, wiederkehrende Aufgaben zu automatisieren, besonders wenn du häufig mit dem Zwischenspeicher arbeitest.

FAQ: Häufige Fragen

1. Was ist der Laufzeitfehler '-2147221404'?
Dieser Fehler bedeutet, dass ein ungültiges Format im DataObject gefunden wurde, meist weil der Zwischenspeicher leer ist.

2. Wie kann ich diesen Fehler umgehen?
Du kannst die GetFormat-Methode verwenden, um sicherzustellen, dass Text im Zwischenspeicher vorhanden ist, bevor du versuchst, ihn abzurufen. Alternativ kannst du eine Fehlerbehandlungsroutine einbauen.

3. Was ist gettext excel?
gettext excel bezieht sich auf die Methode, mit der du Text aus dem Excel-Zwischenspeicher abrufen kannst. Es ist eine nützliche Funktion, um Daten zu importieren, die zuvor kopiert wurden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige