• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Hoofletters Userform

  • Onderwerp starter Onderwerp starter don42
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

don42

Gebruiker
Lid geworden
25 apr 2014
Berichten
800
Hallo beste mensen

ik heb een userform en met volgende code
Code:
TextBox1.Value = WorksheetFunction.Proper(TextBox1.Value)
is elk eerste woord een hoofdletter
kan het ook dat het eerste en laatse woord een hoofdletter is?
nu wordt jan de hoop > Jan De Hoop dat is niet mooi en moet de Hoop zijn
voor namen met 2 woorden werkt het super

Don
 
Daar is geen standaard functie voor dus die zal je zelf moet programmeren.
 
Voorbeeldje:

Code:
Function UEWLW(Regel As String) As String
    Dim i As Integer
    
    For i = Len(Trim(Regel)) To 1 Step -1
        If Mid(Regel, i, 1) = " " Then Exit For
    Next i
    
    i = i + 1
    Mid(Regel, 1, 1) = UCase(Mid(Regel, 1, 1))
    Mid(Regel, i, 1) = UCase(Mid(Regel, i, 1))
    UEWLW = Regel
End Function

Aanroep is dan:
TextBox1.Value = UEWLW(TextBox1.Value)

NB:
UEWLW = Uppercase Eerste Woord Laatste Woord
Je moet wat verzinnen ;)
 
Laatst bewerkt:
dit heb ik tot nu toe

Code:
Private Sub CommandButton1_Click()
If Range("b2").Value = ("") Then 'Tot hier is enkel om geen foutmelding te krijgen als de rij nog leeg is...
  Range("b2").Select
    If Me.TextBox1.Value = "" Then
      MsgBox "Je moet de naam van een deelnemer invullen!." & vbNewLine & "En dan 2x op Enter voor de volgende" & vbNewLine & "Of op stop om het invoeren te beëindigen", vbExclamation, "Oeps foutje   Café de Breer©"
        Me.TextBox1.SetFocus
          Exit Sub
          End If
Range("b1").Select
TextBox1.Value = WorksheetFunction.Proper(TextBox1.Value)
 Range("b2").Value = TextBox1.Text
  ActiveCell.End(xlDown).Offset(1, 0).Select
   TextBox1.Text = ""
    Me.TextBox1.SetFocus
     Exit Sub
       End If
Range("b1").Select
  ActiveCell.End(xlDown).Select
    laatste = ActiveCell.Row
     TextBox1.Value = WorksheetFunction.Proper(TextBox1.Value)
      Cells(laatste + 1, 2).Value = TextBox1.Text
If Me.TextBox1.Value = "" Then
Cells(laatste + 1, 2).Select
 MsgBox "Je moet de naam van de deelnemer invullen!.", vbExclamation, "Oeps foutje   Café de Breer©"
 Me.TextBox1.SetFocus
  Exit Sub
     End If
 TextBox1.Text = ""
Me.TextBox1.SetFocus
ActiveCell.End(xlDown).Offset(1, 0).Select
End Sub
 
Daar kan je dus mijn functie zo bij in hangen en dan de regel voor de titel aanpassen zoals ik bij het aanroep voorbeeld aangaf.
 
En wat doe je dan bij Jan De Hoop Scheffer?
 
Heel terechte opmerking. Zo zijn er uiteraard nog veel meer te verzinnen. Ben benieuwd wat TS er van vind.
 
Persoonlijk zou ik een functie gebruiken die alle tussenvoegsels er uit trekt, en de rest By default in hoofdletter zet. Maar wellicht dat anderen betere oplossingen hebben. De tussenvoegsel functie heb ik in ieder geval wel liggen.
 
Dat is niet zo moeilijk om te maken, maar als het al op de plank ligt en TS heeft er interesse zou dat mooi zijn uiteraard :)
 
het zal wel dom zijn maar krijg het niet voor elkaar om die code ergens er tussen te zetten zodat het werkt
moet ik stukjes van mijn code wissen?
krijg ook op meerdere plaatsen end function!

wat doe ik fout of waar moet de code komen te staan
 
Laatst bewerkt:
Over welke functie hebben we het?
 
Ik heb de boel een beetje opgeschoont en aangevuld met de functie die ik voor je maakte. Probeer het dus een zo:
Code:
Private Sub CommandButton1_Click()
    If Range("b2").Value = ("") Then 'Tot hier is enkel om geen foutmelding te krijgen als de rij nog leeg is...
        Range("b2").Select
        If TextBox1.Value = "" Then
            MsgBox "Je moet de naam van een deelnemer invullen!." & vbNewLine & "En dan 2x op Enter voor de volgende" & vbNewLine & "Of op stop om het invoeren te beëindigen", vbExclamation, "Oeps foutje   Café de Breer©"
            Me.TextBox1.SetFocus
            Exit Sub
        End If
        
        Range("b1").Select
        TextBox1.Value = UEWLW(TextBox1.Value)
        Range("b2").Value = TextBox1.Text
        ActiveCell.End(xlDown).Offset(1, 0).Select
        TextBox1.Text = ""
        Me.TextBox1.SetFocus
        Exit Sub
    End If
    
    Range("b1").Select
    ActiveCell.End(xlDown).Select
    laatste = ActiveCell.Row
    TextBox1.Value = UEWLW(TextBox1.Value)
    Cells(laatste + 1, 2).Value = TextBox1.Text
    If TextBox1.Value = "" Then
        Cells(laatste + 1, 2).Select
        MsgBox "Je moet de naam van de deelnemer invullen!.", vbExclamation, "Oeps foutje   Café de Breer©"
        Me.TextBox1.SetFocus
        Exit Sub
    End If
    
    TextBox1.Text = ""
    Me.TextBox1.SetFocus
    ActiveCell.End(xlDown).Offset(1, 0).Select
End Sub

Function UEWLW(Regel As String) As String
    Dim i As Integer
    
    For i = Len(Trim(Regel)) To 1 Step -1
        If Mid(Regel, i, 1) = " " Then Exit For
    Next i
    
    i = i + 1
    Mid(Regel, 1, 1) = UCase(Mid(Regel, 1, 1))
    Mid(Regel, i, 1) = UCase(Mid(Regel, i, 1))
    UEWLW = Regel
End Function
 
Laatst bewerkt:
Waarom gebruiken jullie geen VBA ?

Code:
Sub M_snb()
   MsgBox StrConv("en nu een keer met vba", 3)
End Sub
 
Omdat niet ieder woord een hoofdletter moet krijgen.
 
Om een string als 'baroness van lutjebroek tot appelscha' om te bouwen tot: 'Baroness van Lutjebroek tot Appelscha' redt je het niet met zo'n simpele functie als snb suggereert. Dat werkt alleen als je de string zelf onderzoekt op alle mogelijke tussenvoegsels. En dan kom je op iets als dit uit:

Code:
Public Function SmarterCaps(Tekst As String)
Dim Test As String
Dim arr As Variant, Tussen As String, i As Integer
Dim bCheck As Boolean
    
    Test = Tekst
    Do Until CheckTussenvoegsel(Test) = ""
        Tussen = CheckTussenvoegsel(Test)
        Test = Replace(Test, " " & Tussen & " ", " |" & Tussen & "| ")
        bCheck = True
    Loop
    arr = Split(Test, " ")
    If bCheck = True Then
        For i = LBound(arr) To UBound(arr)
            If SmarterCaps & "" <> "" Then SmarterCaps = SmarterCaps & " "
            If Left(arr(i), 1) = "|" Then
                SmarterCaps = SmarterCaps & Replace(arr(i), "|", "")
            Else
                SmarterCaps = SmarterCaps & StrConv(arr(i), vbProperCase)
            End If
        Next i
    Else
        SmarterCaps = StrConv(Tekst, vbProperCase)
    End If

End Function

Deze functie doet an sich wel het werk, maar heeft natuurlijk nog wat teksten nodig. Dat doet functie CheckTussenvoegsel. Het lijkt mij niet zo lastig om die verder uit te breiden als dat nodig mocht zijn. Ik kom voorlopig niet verder dan deze lijst :).

Code:
Private Function CheckTussenvoegsel(Tussen As String) As String

    If InStr(1, Tussen, " aan der ") > 0 Then CheckTussenvoegsel = "aan der": Exit Function
    If InStr(1, Tussen, " aan den ") > 0 Then CheckTussenvoegsel = "aan den": Exit Function
    If InStr(1, Tussen, " aan de ") > 0 Then CheckTussenvoegsel = "aan de": Exit Function
    If InStr(1, Tussen, " aan het ") > 0 Then CheckTussenvoegsel = "aan het": Exit Function
    If InStr(1, Tussen, " bij der ") > 0 Then CheckTussenvoegsel = "bij der": Exit Function
    If InStr(1, Tussen, " bij den ") > 0 Then CheckTussenvoegsel = "bij den": Exit Function
    If InStr(1, Tussen, " bij de ") > 0 Then CheckTussenvoegsel = "bij de": Exit Function
    If InStr(1, Tussen, " de la ") > 0 Then CheckTussenvoegsel = "de la": Exit Function
    If InStr(1, Tussen, " des ") > 0 Then CheckTussenvoegsel = "des": Exit Function
    If InStr(1, Tussen, " der ") > 0 Then CheckTussenvoegsel = "der": Exit Function
    If InStr(1, Tussen, " den ") > 0 Then CheckTussenvoegsel = "den": Exit Function
    If InStr(1, Tussen, " de ") > 0 Then CheckTussenvoegsel = "de": Exit Function
    If InStr(1, Tussen, " di ") > 0 Then CheckTussenvoegsel = "di": Exit Function
    If InStr(1, Tussen, " du ") > 0 Then CheckTussenvoegsel = "du": Exit Function
    If InStr(1, Tussen, " het ") > 0 Then CheckTussenvoegsel = "het": Exit Function
    If InStr(1, Tussen, " in der ") > 0 Then CheckTussenvoegsel = "in der": Exit Function
    If InStr(1, Tussen, " in den ") > 0 Then CheckTussenvoegsel = "in den": Exit Function
    If InStr(1, Tussen, " in de ") > 0 Then CheckTussenvoegsel = "in de": Exit Function
    If InStr(1, Tussen, " in het ") > 0 Then CheckTussenvoegsel = "in het": Exit Function
    If InStr(1, Tussen, " in 't ") > 0 Then CheckTussenvoegsel = "in 't": Exit Function
    If InStr(1, Tussen, " in ") > 0 Then CheckTussenvoegsel = "in": Exit Function
    If InStr(1, Tussen, " la ") > 0 Then CheckTussenvoegsel = "la": Exit Function
    If InStr(1, Tussen, " le ") > 0 Then CheckTussenvoegsel = "le": Exit Function
    If InStr(1, Tussen, " op der ") > 0 Then CheckTussenvoegsel = "op der": Exit Function
    If InStr(1, Tussen, " op den ") > 0 Then CheckTussenvoegsel = "op den": Exit Function
    If InStr(1, Tussen, " op de ") > 0 Then CheckTussenvoegsel = "op de": Exit Function
    If InStr(1, Tussen, " op 't ") > 0 Then CheckTussenvoegsel = "op 't": Exit Function
    If InStr(1, Tussen, " op ") > 0 Then CheckTussenvoegsel = "op": Exit Function
    If InStr(1, Tussen, " 's ") > 0 Then CheckTussenvoegsel = "'s": Exit Function
    If InStr(1, Tussen, " ter ") > 0 Then CheckTussenvoegsel = "ter": Exit Function
    If InStr(1, Tussen, " ten ") > 0 Then CheckTussenvoegsel = "ten": Exit Function
    If InStr(1, Tussen, " te ") > 0 Then CheckTussenvoegsel = "te": Exit Function
    If InStr(1, Tussen, " tot ") > 0 Then CheckTussenvoegsel = "tot": Exit Function
    If InStr(1, Tussen, " uit der ") > 0 Then CheckTussenvoegsel = "uit der": Exit Function
    If InStr(1, Tussen, " uit den ") > 0 Then CheckTussenvoegsel = "uit den": Exit Function
    If InStr(1, Tussen, " uit de ") > 0 Then CheckTussenvoegsel = "uit de": Exit Function
    If InStr(1, Tussen, " uit het ") > 0 Then CheckTussenvoegsel = "uit het": Exit Function
    If InStr(1, Tussen, " van der ") > 0 Then CheckTussenvoegsel = "van der": Exit Function
    If InStr(1, Tussen, " van den ") > 0 Then CheckTussenvoegsel = "van den": Exit Function
    If InStr(1, Tussen, " van de ") > 0 Then CheckTussenvoegsel = "van de": Exit Function
    If InStr(1, Tussen, " vanden ") > 0 Then CheckTussenvoegsel = "vanden": Exit Function
    If InStr(1, Tussen, " vander ") > 0 Then CheckTussenvoegsel = "vander": Exit Function
    If InStr(1, Tussen, " von der ") > 0 Then CheckTussenvoegsel = "von der": Exit Function
    If InStr(1, Tussen, " voor den ") > 0 Then CheckTussenvoegsel = "voor den": Exit Function
    If InStr(1, Tussen, " voor de ") > 0 Then CheckTussenvoegsel = "voor de": Exit Function
    If InStr(1, Tussen, " voor 't ") > 0 Then CheckTussenvoegsel = "voor 't": Exit Function
    If InStr(1, Tussen, " uit ") > 0 Then CheckTussenvoegsel = "uit": Exit Function
    If InStr(1, Tussen, " van ") > 0 Then CheckTussenvoegsel = "van": Exit Function
    If InStr(1, Tussen, " von ") > 0 Then CheckTussenvoegsel = "von": Exit Function
    If InStr(1, Tussen, " voor ") > 0 Then CheckTussenvoegsel = "voor": Exit Function

End Function

De functie SmarterCaps zal ook vast smarter kunnen, maar dat mag iemand als snb maar oplossen. Het is tenslotte geen databasevraag :).
 
Laatst bewerkt:
Zie er goed uit :)
En TS was al "confused" ;)
 
Confused? You won't be after this!
(Ja, ik ken m'n klassiekers :D )
 
@Octa

Mijn vraag was helemaal niet als 'oplossing' bedoeld, maar als reaktie op die application.proper().
En nu nog de variatie als er geen voorletters gebruikt worden: De heer Van den Bosch.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan