Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

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 As SingleByVal 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 As SingleByVal 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"