...
der letzte Code geht davon aus, dass deine Abkürzungen alle exakt 4 Zeichen lang sind. Weil ich es in meine Codesammlung aufnehmen wollte, habe ich das gerade ein bisschen umgeschrieben, so dass ich es (ähnlich der Schnellbausteine in Word) verwenden kann. Dabei habe ich festgelegt, dass vor der Abkürzung ein Trennzeichen verwendet werden muss (zwingend!). Dadurch kann die Abkürzung beliebig lang sein. Als Trennzeichen habe ich für mich für
Leerzeichen, Zeilenumbruch, Tab, und (
entschieden.
Vielleicht willst ja auch du unterschiedlich lange Abkürzungen verwenden.
Das sähe dann im ersten Entwurf so aus:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 And Shift = 0 Then 'Enter ohne (Shift | STRG | Alt | ...)
' If KeyCode = 114 And Shift = 0 Then 'F3 ohne (Shift | STRG | Alt | ...)
If replace_shortcut() Then
KeyCode = 0
End If
End If
End Sub
Function replace_shortcut()
'Returns True if abbreviation is replaced
Static Dic As Object
Dim last_word As String, last_word_index As Long
'Abbreviations and long terms in Dic
If Dic Is Nothing Then
Set Dic = CreateObject("Scripting.Dictionary")
Dic.Add "A123", "Kunde anschreiben"
Dic.Add "mfg", "Mit freundlichen Grüßen"
Dic.Add "lg", "Liebe Grüße"
'Dic.Add ..., ...
End If
replace_shortcut = False
With TextBox1
last_word_index = Application.WorksheetFunction.Max( _
InStrRev(.Text, " ", -1, vbBinaryCompare), _
InStrRev(.Text, vbCr, -1, vbBinaryCompare), _
InStrRev(.Text, vbLf, -1, vbBinaryCompare), _
InStrRev(.Text, vbTab, -1, vbBinaryCompare), _
InStrRev(.Text, "(", -1, vbBinaryCompare)) + 1
last_word = CStr(Mid(.Text, last_word_index))
If Dic.Exists(last_word) Then
.Text = Mid(.Text, 1, Len(.Text) - Len(last_word)) & Dic(last_word)
replace_shortcut = True
End If
End With
End Function
Grüße, Ulrich
|