VisualBasic Nachname_Vorname per VBA in Zelle tauschen

schnuff

Cadet 3rd Year
Registriert
Okt. 2016
Beiträge
32
Hallo Forum,

ich habe ein Adressensheet in der in Spalte A der Nachname und Vorname steht. Diese Adresse ziehe ich mir per Makrobutton in ein Rechnungsformular. Mein Wunsch wäre, dass per VBA Code der Nachname mit dem Vornamen in dem Rechnungsformular getauscht wird. D.h. der Vorname zuerst.

Gibt es hierfür einen Lösungsansatz.

Für eure Hilfe im Voraus vielen Dank.
schnuff
 
Ja klar, das trennende Element suchen in VBA (gibt Pos des Trennzeichens zurück), dann Links und Rechts oder Teil verwenden.
Ist das Trennzeichen nun " " oder "_" wie in der Überschrift?
Bei ersterem wirds schwierig mit doppelten Namen als Vornamen.
Da müsste man noch die Anzahl der vorhandenen Trennzeichen herausfinden und dann am Zweiten trennen.

Hier mal n Beispiel:
Code:
Option Explicit
Sub Schaltfläche1_Klicken()
Dim strSource As String, strTemp As String, strFName As String, strSName As String, strLName As String
Dim intLen As Integer, intPos1 As Integer, intPos2 As Integer
Dim boolSurname As Boolean

strSource = ActiveSheet.Cells(1, 1).Value
intPos1 = InStr(strSource, "_")
If (intPos1 = 0) Then GoTo ErrorHandler1
intLen = Len(strSource)
strFName = Left(strSource, intPos1 - 1)
strSName = ""
strTemp = Right(strSource, intLen - intPos1)
intPos2 = InStr(strTemp, "_")
intLen = Len(strTemp)

If (intPos2 <> 0) Then
    boolSurname = True
Else
    strLName = strTemp
    boolSurname = False
End If

Select Case boolSurname
    Case True
        strSName = Left(strTemp, intPos2 - 1)
        strLName = Right(strTemp, intLen - intPos2)
        MsgBox ("true " & strLName & " " & strSName & " " & strFName)
    Case False
        MsgBox ("false " & strLName & " " & strFName)
    Case Else
        MsgBox ("logical error")
End Select

Exit Sub

ErrorHandler1:
MsgBox ("Kein Trennzeichen ""_"" gefunden")
Exit Sub

End Sub
In eine Zelle packen musst du das Ergebnis selber, das Trennzeichen hier ist "_", und auch die Schleife bis xlEnd kannst du ja selber schreiben. Trennen (und erkennen) kann das doppelte Vornamen selber.
(Und an alle anderen: erschlagt mich nicht, bin kein Programmierer. :D )
 
Zuletzt bearbeitet:
Hey schnuff,

hier ist ne kleine Funktion die Du in deinen Code kopieren kannst. Einfach den Namen ganz normal aufrufen wie bisher und dann durch die Funktion schicken. Doppelte Nachnamen muessten aber mit Bindestrich geschrieben werden.

Code:
Option Explicit

Public Function NamenTauschen(ByVal nme As String, ByVal trenn As String) As String
Dim tempArray As Variant
Dim tempName  As String
Dim x

tempArray = Split(nme, trenn)

tempName = tempArray(UBound(tempArray, 1))

For x = 0 To UBound(tempArray, 1) - 1
    tempName = tempName & trenn & tempArray(x)
Next x

NamenTauschen = tempName
End Function

Public Sub FunctionTester()

MsgBox NamenTauschen("Meier-Mueller Horst", " ")

End Sub

Gruesse
SOL
 
Hallo Merle, Hi SOL,

vielen Dank für euren Beitrag. Ich habe beide Code`s versucht einzubauen, jedoch erfolglos. @SOL ich würde gerne deinen Code präferieren, wie muss ich ihn in mein Tool einbauen. (Anlagen anbei).
Nochmals kurz wiederholt! Ich habe eine userform mit mehreren buttons. Einer davon liefert mir das Einfügen der Adresse in mein Rechnungsformular (sheet Rechnung) in Spalte A3. Jedoch mit dem Nachnamen zuerst. Wie muss ich den Option Explicit Befehl funktionsfähig einbauen, sodass mir mein Adressbutton die richtige Ansicht liefert. (Vorname zuerst).

Vielen Dank für einen weiteren Lösungsansatz.

Viele Grüße
schnuff
 

Anhänge

  • Adresse tauschen VBA.png
    Adresse tauschen VBA.png
    153,4 KB · Aufrufe: 195
  • Namen tauschen.png
    Namen tauschen.png
    491,4 KB · Aufrufe: 188
Zuletzt bearbeitet:
Das option explicit aus meinem Beispiel kannst Du ignorieren. Wichtig ist die Funktion "NamenTauschen". Die kopierst du dir in irgendein Modul. Und dann baust du den function call um deine Textbox herum :-)

In etwa so:

Code:
Range(bla bla bla)  = NamenTauschen(Textbox1, " ")

Den Rest kannst du weglassen. Die tester Funktion war nur für mich :)

Good luck.
 
Zuletzt bearbeitet: (Bisschen format reinbringen.)
Hallo SOL,

der Code liefert mir nur ein bedingt gebrauchbares Ergebnis.

Folgendes Ergebnis habe ich:
Ursprung Spalte A3: Mustermann Klaus + Stefanie
Ergebnis: Stefanie Mustermann Klaus +

Wie müsste man den Code verändern, wenn einfach nur der Nachname hinten angestellt werden soll?


Gruß schnuff
 
Hi schnuff,

darauf war ich nicht vorbereitet. Man denkt immer es kann nichts schiefgehen und dann....:lol:

Ich habe die Funktion leicht angepasst, sodass sie mit dem zweiten Namen im Array anfaengt und den ersten hinten anhaengt.

Code:
Public Function NamenTauschen(ByVal nme As String, ByVal trenn As String) As String
Dim tempArray As Variant
Dim tempName  As String
Dim x

tempArray = Split(nme, trenn)

For x = 1 To UBound(tempArray, 1)
    tempName = tempName & tempArray(x) & trenn
Next x

tempName = tempName & tempArray(0)

NamenTauschen = tempName
End Function

Einfach mal probieren ob es jetzt besser geht.

Schoene Gruesse
 
Hi SOL,

der Code ist eine Punktlandung, es funktioniert und liefert genau das Ergebnis was ich benötige.

Mein Fazit! Es gibt Menschen die geben dir mit Gesten und Taten soviel Wertvolles in einem Augenblick, was andere ein ganzes Leben nicht schaffen.

Mein Dank an dich für die zugewandte Zeit.

Viel Grüße
schnuff
 
Zurück
Oben