tray-park
Goto Top

Access VBA - Umlaute replacen und Zeichen begrenzen

Access 2007 SP3
Ich bin kein professioneller Entwickler face-smile

Hallo in die Runde,

ich bastele gerade an ner kleinen Benutzerverwaltungsdatenbank.

Hierzu habe ich eine User-Tabelle erstellt, in welcher das "username"-Feld auf 20 Zeichen begrenzt ist.

Im Formular trägt man dann Vor- & Nachnamen in Textfelder (txt_first_name & txt_last_name) ein.

Nach dem LostFocus des txt_last_name werden die Werte der beiden Textfelder in der Textbox txt_Username verkettet und die Anfangsbuchstaben der Namen von Groß- in Kleinschreibung geändert.

Daraufhin wird der Inhalt der Textbox auf Umlaute überprüft und die Gefundenen, mit Vokalen ersetzt.

Wenn der Username nun größer 20 ist, wirft die Runtime Fehler aus.

Bei genau 21 Zeichen:

Run-time-error '3163'

The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.

Bei mehr als 21 Zeichen:

Run-time-error '-2147352567 (80020009)':

The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.

Daraufin habe ich versucht den Fehler abzufangen. Tritt ein Fehler auf, wird die Zeichenkette auf 20 Zeichen reduziert und der oben erklärte Vorgang wiederholt. Leider war das wohl nix.

Ist die Kette nun größer 20 geschieht halt leider gar nichts.

Hier der Code:
Private Sub txt_last_name_LostFocus()

On Error GoTo UmlautProb

txt_last_name = UCase(Left(txt_last_name, 1)) & LCase(Mid(txt_last_name, 2))

txt_Username = LCase(txt_first_name.Value & txt_last_name.Value)

txt_Username.Value = Replace(txt_Username.Value, "ä", "ae")  
txt_Username.Value = Replace(txt_Username.Value, "ö", "oe")  
txt_Username.Value = Replace(txt_Username.Value, "ü", "ue")  

txt_Username.Value = Replace(txt_Username.Value, "Ä", "Ae")  
txt_Username.Value = Replace(txt_Username.Value, "Ö", "Oe")  
txt_Username.Value = Replace(txt_Username.Value, "Ü", "Ue")  

txt_Username.Value = Replace(txt_Username.Value, "ß", "ss")  

UmlautProb:

Select Case Err.Number

Case 3163:
'If Len(txt_Username.Value) > 20 Then  

Dim s1 As String
Dim s2 As String

s1 = txt_Username.Value

s2 = Left(s1, 20)

txt_Username.Value = s2

txt_last_name = UCase(Left(txt_last_name, 1)) & LCase(Mid(txt_last_name, 2))

txt_Username = LCase(txt_first_name.Value & txt_last_name.Value)

txt_Username.Value = Replace(txt_Username.Value, "ä", "ae")  
txt_Username.Value = Replace(txt_Username.Value, "ö", "oe")  
txt_Username.Value = Replace(txt_Username.Value, "ü", "ue")  

txt_Username.Value = Replace(txt_Username.Value, "Ä", "Ae")  
txt_Username.Value = Replace(txt_Username.Value, "Ö", "Oe")  
txt_Username.Value = Replace(txt_Username.Value, "Ü", "Ue")  

txt_Username.Value = Replace(txt_Username.Value, "ß", "ss")  

'End If  

'Exit Sub  

End Select

End Sub

Ich denke ich liege nicht falsch mit der Vermutung, hier einiges durcheinander gebracht zu haben.

Könnt ihr mir etwas unter die Arme greifen?

Freue mich über jede Rückmeldung

LG Tray

Content-ID: 181630

Url: https://administrator.de/contentid/181630

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

n4426
n4426 07.03.2012 um 20:34:13 Uhr
Goto Top
Hi Tray,

ich würds einfach so machen.

Private Sub txt_last_name_LostFocus() 
'Nachname Formatieren  
Me.Nachname = UCase(Left(Me.Nachname, 1)) & LCase(Mid(Me.Nachname, 2))

'Vorname Formatieren  
Me.Vorname = UCase(Left(Me.Vorname, 1)) & LCase(Mid(Me.Vorname, 2))

'Username ermitteln  
Dim varUsername As String


varUsername = LCase(Me.Vorname & "." & Me.Nachname)  

varUsername = Replace(varUsername, "ä", "ae")  
varUsername = Replace(varUsername, "ö", "oe")  
varUsername = Replace(varUsername, "ü", "ue")  

varUsername = Replace(varUsername, "Ä", "Ae")  
varUsername = Replace(varUsername, "Ö", "Oe")  
varUsername = Replace(varUsername, "Ü", "Ue")  

varUsername = Replace(varUsername, "ß", "ss")  

'Username auf max. 20 Zeichen kürzen (wenn notwendig)  
Me.username = Left(varUsername, 20)

End Sub 

mfg
n4426
tray-park
tray-park 08.03.2012 um 09:15:10 Uhr
Goto Top
Hi n4426,

vielen Dank für die großartige Hilfe.
Funktioniert super.

Danke.

Liebe Grüße

Tray