Voornaam uit gebruikersnaam halen

Status
Niet open voor verdere reacties.

SjonR

Verenigingslid
Lid geworden
10 nov 2016
Berichten
3.279
Helpers, een hele goedemorgen.

Ik wil van gebruikersnamen de voornaam gebruiken bij het begroeten van medewerker.

Deze namen zien er dan zo uit: ( AB staat voor een verstiging, heeft altijd zelfde formaat.

Bakker, Karel (AB)

Hier lukt het me prima om de voornaam eruit te krijgen, omdat ik met Instr de kommapositie gebruik.

Het wordt echter lastiger als ik een medewerker heb met een naam met tussenvoegsels, bijvoorbeeld :

Linde, Peter van der (AB)


Hier zou ik de tweede spatiepositie moeten weten, maar de lukt met niet met VBA. Met een excelformule lukt dit wel, maar VBA pakt deze methode niet ( Typen komen niet met elkaar overeen).

Wie heeft raad?

Code:
Sub voornaam()
Dim Rng As Range
Set Rng = Range("A1")
Dim Vnaam, VSnaam As String
Dim Komma, Spatie As Integer
Komma = InStr(Rng, ",")
[COLOR="#00FF00"]'Spatie = InStr(Rng, " ", InStr(Rng, " ") + 1)[/COLOR]

Vnaam = Mid(Rng, Komma + 2, Len(Rng) - Komma - 6)

MsgBox Vnaam


End Sub
 
Doe het eens zo:
Code:
Sub voornaam()
    MsgBox Split(Range("A1"))(1)
End Sub
 
Laatst bewerkt:
Werkt als een tierelier Ed,

Bedankt. Kan je me ook iets aan uitleg geven? Die regel van komma kan er nog uit. Wat is de werking van de vn() en de vn(1)?

Gr sjon
 
Had 'm nog aangepast.
Het is nu maar 1 regel ;)
Code:
Sub voornaam()
    MsgBox Split(Range("A1"))(1)
End Sub
De Split functie maakt een array van de string.
Er is geen split karakter opgegeven en dan is de default een spatie.
Het indexelement 1 van de array bevat dan woord na de eerste spatie.
 
Laatst bewerkt:
Top Edmoor,

Ik ben weer een stukje wijzer.

Gr.

Sjon
 
Heb 'm nog wat aangepast, het klopte niet helemaal.
Gaat fout wanneer Option Explicit wordt gebruikt.
 
Laatst bewerkt:
Geweldig, hebt wordt korter en korter :)

nog 1 vraagje.

wat is de functie van de 1, na de range. Als ik daar een 2 van maak of een 7 , dan werkt het nog steeds. Als ik er 19 van maak gaat het mis.

Code:
MsgBox Split(Mid(Range("A1"), [COLOR="#FF0000"]1[/COLOR]))(1)
 
Ik ben kennelijk nog niet wakker, die kan er ook uit:
Code:
Sub voornaam()
    MsgBox Split(Range("A1"))(1)
End Sub
Weer korter dus ;)

Maar die 1 vertelt de Mid functie te beginnen op positie 1.
Daarmee is 'ie dus ook overbodig.
 
Laatst bewerkt:
Als je nog even een bak koffie neemt hebben we straks een code van slechts 1 woord :)

Ik ben weer blij met je hulp. Daarmee is dit de code die ik uiteindelijk zal gebruiken voor de begroeting op een userform.

Code:
Private Sub UserForm_Initialize()
Dim Groet, Naam, Vnaam As String
Naam = Application.UserName
Vnaam = Split(Naam)(1)
Groet = Hour(Time)
Select Case Groet

Case 0 To 11
    Groet = "Goedemorgen"
Case 12 To 17
    Groet = "Goedemiddag"
Case 18 To 23
    Groet = "Goedenavond"
End Select

Label1.Caption = Groet & " " & Vnaam & ","
End Sub
 
Laatst bewerkt:
code van slechts 1 woord lukt niet. Wel van 1 regel:cool:

Code:
Private Sub UserForm_Initialize()
  Label1.Caption = "Goede" & Application.Lookup(Hour(Time), Array(0, 12, 18), Array("morgen ", "middag ", "navond ")) & Split(Application.UserName)(1) & ","
End Sub

Let er wel op dat als er geen spatie of niets na een spatie staat Split()(1) een foutmelding geeft. (blijkt niet uit je voorbeeldjes maar is wel iets om rekening mee te houden)
 
VenA,

Meesterlijk! :cool:

En zover ik weet hebben al mijn collega's een voor en achternaam, dus zal de spatie er wel in zitten.

Ook jij bedankt.
 
Code:
[COLOR=#3E3E3E]Label1.Caption =[/COLOR] "Goede" & Choose(Hour(Now) \ 6 + 1, "nacht ", "morgen ", "middag ", "navond ") [COLOR=#3E3E3E]& Split(Application.UserName)(1) & ","[/COLOR]
 
Harry,

Ook jij bent een VBA tovenaar.

Ik zal me er in moeten verdiepen, maar zoals je zelf al wist, het werkt top!

Gr, en dank,

Sjon
 
Als je dit gebruikt pakt vb de username
Code:
Label14.Caption = "Het is weer" & Format(Date, " dddd ") & "beste " & Environ("Username") & "."
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan