Frage von Kyrill92, 35

VBA HIlfe?

Hallo Leute, ich habe folgenden VBA-Code. Er erzeugt u.a. ein neues Arbeitsblatt. Der Name des Arbeitsblatt ist bis jetzt nur der Vorname des eigegebenen Namen. Es soll aber "Vorname, Nachname" sein. Kann mir da jmd helfen?

Vielen Dank.

Sub Schaltfläche1_Klicken()

Dim consName As String Dim result As VbMsgBoxResult

consName = InputBox("Please enter the consultants name in Format: Lastname, Firstname", "Controller-Name")

If consName <> "" And InStr(1, consName, ",", vbTextCompare) > 0 Then NewConsultantSheet (consName) 'Legt ein neues Tabellenblatt für den Consultant an NewConsultantOverviewColumn (consName) 'Legt eine neue Spalte in der Übersicht an

'Am Ende direkt auf das Tabellenblatt des neuen Consultant springen
Worksheets(GetConsultantFirstName(consName)).Select

Else result = MsgBox("You enter the wrong format", vbCritical, "Error") End If

End Sub

Sub NewConsultantSheet(consName As String)

ThisWorkbook.Worksheets("Model").Copy Before:=ThisWorkbook.Sheets("Model")

ActiveSheet.Name = GetConsultantFirstName(consName) ActiveSheet.Cells(1, 2).Value = consName

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Suboptimierer, Community-Experte für Excel, 24

Die Funktion besagt doch schon, dass du nur den Vornamen als Namen für das Tabellenblatt verwendest:

ActiveSheet.Name = GetConsultantFirstName(consName)

Wenn du die vollständige Eingabe verwenden willst, darfst du die GetConsultantFirstName-Funktion nicht darüber laufen lassen:

ActiveSheet.Name = consName
Kommentar von Suboptimierer ,

PS: Ich würde Vorname und Nachname nacheinander abfragen, sonst bekommst du schnell Dreher mit Vorname und Nachname oder unnötige Leerzeichen beim Komma, die du erst filtern musst oder jemand setzt zwei Kommas, usw.

Alternative: Schreibe dir ein Userform, in dem du alles Notwendige abfragst.

Expertenantwort
von Ninombre, Community-Experte für Excel, 35

Boah - ich steige durch die Konstruktion nicht durch (dass der Code auf GuteFrage leider mit den Umbrüchen total zerhackt wird, macht es nicht unbedingt einfacher!)

Du rufst anscheinend doch noch eine Funktion GetConsultantFirstName auf. Was soll da passieren? Es würde an der Stelle reichen

worksheets(consname).select bzw
activesheet.name = consname

Kommentar von Kyrill92 ,

Ja aber ich checke nicht ganz woher VBA weiß was der Firstname ist. Theoretisch müsste man das ja nur ersetzen durch consName, Firstname oder?

Kommentar von Ninombre ,

Das macht nicht VBA, das sieht eher danach aus, dass es eine weitere Sub gibt, in der der Vorname ermittelt wird. Das willst Du aber ja nicht.

Vielleicht reicht es schon zwei Befehle zu ersetzen:
1. in Sub NewConsultantSheet
ActiveSheet.Name = GetConsultantFirstName(consName)
-> wird zu:
ActiveSheet.Name = consName

2. in  Sub Schaltfläche1_Klicken()
Worksheets(GetConsultantFirstName(consName)).Select
-> wird zu
Worksheets(consName).Select

Kommentar von Kyrill92 ,

Das sollte man dazu kennen:
Function GetConsultantFirstName(consName As String) As StringDim NameArray() As StringNameArray = Split(consName, ",")GetConsultantFirstName = Trim(NameArray(1))End Function

Kommentar von Ninombre ,

Genau da wird Dein Name abgeschnitten bzw. nur noch die Vorname verwendet. Also in den beiden genannten Stellen auf den Aufruf dieser Function verzichten.

Kommentar von Ninombre ,

Ganz am Anfang Deiner Frage schreibt Du, dass die Tabellenblätter nach Vorname Nachname benannt werden sollen. Ist das richtig oder soll es wie bei der Erfassung im Textfeld Nachname, Vorname sein?

Wenn Du Vorname Nachname haben möchtest, muss man noch etwas drehen

Function namedrehen(consname As String)
Dim NameArray() As String
NameArray = Split(consname, ",")
namedrehen = Trim(NameArray(1)) & " " & Trim(NameArray(0))
End Function
Das würde dann GetConsultantFirstName an den beiden Stellen ersetzen

Keine passende Antwort gefunden?

Fragen Sie die Community