Hallo Poli,
du könntest das z.B. in eine Sub auslagern. Um die einmalige Zuweisung zu den einzelnen Eigenschaften kommst du aber nicht umhin.
Type Data
Name1 As String * 10
Name2 As String * 10
Email As String * 50
End Type
Sub test()
Dim sData As String * 50
Dim udtData As Data
sData = "Name1Name1Name2Name2AA@test.deAA@test.deAA@test.deAA@test.deAA@test.de"
Setdata udtData, sData
MsgBox udtData.Name1
MsgBox udtData.Name2
MsgBox udtData.Email
End Sub
Sub Setdata(temp As Data, sData As String)
temp.Name1 = Mid(sData, 1, 10)
temp.Name2 = Mid(sData, 11, 10)
temp.Email = Mid(sData, 21, 50)
End Sub
Allerdings: Zeichenfolgen fester Länge verwendet heutzutage eigentlich niemand mehr. Das macht nur Sinn, wenn du ohne Zuhilfename der Left-Funktion überzählige Zeichen abschneiden und kürzere Strings automatisch mit Leerzeichen auf die gewünschte Länge auffüllen willst. Grade letzteres nimmt aber unnötig Speicherplatz ein. Außerdem würde dein Übergabestring unnötig lang und unübersichtlich werden. Hier mal eine Alternative, bei der du lediglich ein beliebiges Trennzeichen zu setzen brauchst - z.B. das Semikolon. Dann kannst du die Zuweisung auch über die Split-Funktion aus einem durch diese erzeugten Array auslesen. Dadurch dürfen die übergebenen Namen dann auch unterschiedlich lang sein.
Type Data
Name1 As String
Name2 As String
Email As String
End Type
Sub test()
Dim sData As String
Dim udtData As Data
Dim arr As Variant
sData = "Name1;Name2;AA@test.de"
Setdata udtData, sData
MsgBox udtData.Name1
MsgBox udtData.Name2
MsgBox udtData.Email
End Sub
Sub Setdata(temp As Data, sData As String)
Dim arr As Variant
arr = Split(sData, ";")
temp.Name1 = arr(0)
temp.Name2 = arr(1)
temp.Email = arr(2)
End Sub
Falls du doch eine feste Länge brauchst, dann lieber nur die Type-Strings auf feste Länge setzen, aber die Übergabe variabel halten. Ist benutzerfreundlicher.
Gruß Mr. K.
|