Strg + v vor Textbox-Change-Ereignis abfangen
Betrifft: Strg + v vor Textbox-Change-Ereignis abfangen
von: Lupus
Geschrieben am: 15.09.2004 09:23:07
Hallo Excel-User,
mit der Tastenkombination Strg + v füge ich den Inhalt des Zwischenspeichers in eine Userform-Textbox ein.
Mit welchem Ereignis kann ich den einzufügenden Inhalt bearbeiten bevor das Textbox-Change-Ereignis ausgeführt wird?
Mit TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) kann ich zum Beispiel die Tastaturanschläge vor der Change-Ereignis verändern.
Gibt es da ein ähnliches Ereignis für Strg + v (paste) ?
Gruß Lupus
Betrifft: AW: Strg + v vor Textbox-Change-Ereignis abfangen
von: Axel
Geschrieben am: 15.09.2004 18:55:13
Hallo,
das Ereignis Textbox_BeforeDropOrPaste() wird ausgelöst, bevor die Zwischenablage eingefügt wird.
Über einen Umweg über das DataObject(Bestandteil der MSForms-Bibliothek) kann die Zwischenablage ausgelesen werden.
Das untenstehende Beispiel verdeutlicht dies.
Schau dir in der Hilfe die Parameter zum Event an. Darüber kann die gesamte Operation auch gecancelt werden. Auch das DataObject ist in der Hilfe beschrieben.
Gruß
Axel
Private Sub TextBox1_BeforeDropOrPaste( _
ByVal Cancel As MSForms.ReturnBoolean, _
ByVal Action As MSForms.fmAction, _
ByVal Data As MSForms.DataObject, _
ByVal X As Single, ByVal Y As Single, _
ByVal Effect As MSForms.ReturnEffect, _
ByVal Shift As Integer)
Dim dataobj As New DataObject
' Zwischenablage in das DataObject übernehmen
dataobj.GetFromClipboard
' Zwischenablage auslesen, hier einfache Ausgabe ins Direktfenster
Debug.Print dataobj.GetText(1)
End Sub
Code eingefügt mit
Syntaxhighlighter 2.5
Betrifft: AW: Strg + v vor Textbox-Change-Ereignis abfangen
von: Lupus
Geschrieben am: 16.09.2004 11:47:11
Hallo Axel,
danke, hilft mir schon weiter, habe aber noch folgendes Problem.
Der unten aufgeführte Code soll bewirken, daß ich den Inhalt aus der Zwischenablage in Textbox1 einfüge. Hierbei möchte ich jedoch den Inhalt bevor er in die Textbox1 eingefügt wird, per Code aufarbeiten und erst dann in Textbox1 einfügen (siehe Beispielcode).
Nach Drücken der Tastenkombination Strg + v wird der Inhalt der Zwischenablage doppelt in die Textbox1 eingefügt. Wie kann man das umgehen? Es soll nur der von mir bearbeitete Inhalte der Zwischenablage eingefügt werden.
Wie müßte man den Code verändern, wenn ich den Inhalt von Textbox2 per drag and drop in Textbox1 einfüge? Wird das überhaupt mit dem BeforeDropOrPaste-Ereignis gesteuert?
Private Sub TextBox1_BeforeDropOrPaste( _
ByVal Cancel As MSForms.ReturnBoolean, _
ByVal Action As MSForms.fmAction, _
ByVal Data As MSForms.DataObject, _
ByVal X As Single, ByVal Y As Single, _
ByVal Effect As MSForms.ReturnEffect, _
ByVal Shift As Integer)
Dim strString As String
Dim dataobj As New DataObject
dataobj.GetFromClipboard
'Beispielcode
strString = dataobj.GetText(1)
strString = UCase(strString)
TextBox1 = strString
End Sub
Beispielmappe: https://www.herber.de/bbs/user/10951.xls
Gruß Lupus
Betrifft: AW: Strg + v vor Textbox-Change-Ereignis abfangen
von: Axel
Geschrieben am: 16.09.2004 15:57:05
Hallo,
probiere es mal so:
Gruß
Axel
Private Sub TextBox1_BeforeDropOrPaste( _
ByVal Cancel As MSForms.ReturnBoolean, _
ByVal Action As MSForms.fmAction, _
ByVal Data As MSForms.DataObject, _
ByVal X As Single, ByVal Y As Single, _
ByVal Effect As MSForms.ReturnEffect, _
ByVal Shift As Integer)
Dim strCB As String
Dim dataobj As New DataObject
' Zwischenablage in das DataObject übernehmen
dataobj.GetFromClipboard
' Zwischenablage auslesen, Fehler (wenn Zwischenablage leer) ignorieren
On Error Resume Next
strCB = dataobj.GetText(1)
On Error GoTo 0
If (Len(strCB)) Then
' Inhalt der Zwischenablage in Großschrift konvertieren und der Textbox zuweisen
TextBox1.Value = UCase(strCB)
' Ursprungsbehandlung canceln
Cancel = True
End If
End Sub
Code eingefügt mit
Syntaxhighlighter 2.5
Betrifft: AW: "Cancel = True" that's it
von: Lupus
Geschrieben am: 17.09.2004 11:05:09
Hallo Axel,
vielen Dank!!!
Der Zauber Code lautet "Cancel = True".
Gruß Lupus
Beiträge aus den Excel-Beispielen zum Thema "Strg + v vor Textbox-Change-Ereignis abfangen"