Hallo,
nachdem mir in diesem Forum schon einmal sehr schnell und mit Erfolg geholfen wurde, möchte ich bei einem weiteren Problem um Hilfe bitten.
Mittels unten aufgeführten Code kann ich in verschiedenen Zellen Text (mehrere Worte) in Kleinschrift eingeben und nach drücken von Enter wird der 1.Buchstabe in Großschrift erstellt.
z.Bsp.: max mustermann wird Max Mustermann
Ich benötige aber manchmal Bindestriche zwischen den Worten. Hierbei wird nur das 1. Wort groß geschrieben.
z.Bsp.: max-mustermann wird Max-mustermann
Gibt es eine Möglichkeit dies zu ändern?
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
On Error Resume Next
Dim i As Integer
For i = 90 To 122
If Left(Target, 1) = Chr(i) Then
Target = UCase(Left(Target, 1)) & Mid(Target, 2, Len(Target))
End If
Target = Application.WorksheetFunction.Substitute(Target, Chr(32) & Chr(i), Chr(32) & UCase(Chr(i)))
Next
Application.EnableEvents = True
End Sub
Gruß heimat
Hallo!
Probier mal folgendes und füge nach der Zeile
Target = Application.WorksheetFunction.Substitute(Target, Chr(32) & Chr(i), Chr(32) & UCase(Chr(i)))
noch diese Zeile ein:
Target = Application.WorksheetFunction.Substitute(Target, Chr(45) & Chr(i), Chr(45) & UCase(Chr(i)))
habs selbst jetzt nicht getestet, daher: klappt das?
(32=Leerzeichen, 45=Bindestrich) cu kai
hab mir mal schnell was ausgedacht, sollte so klappen. Wenn dir noch mehr mögliche Trennzeichen als " " oder „-“ einfallen, kannst du die recht einfach ergänzen.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim trennzeichen(1 To 2) As String
Dim temp() As String
Dim speicher As String
Dim wort As String
Dim i, j As Integer
If Target.Value = „“ Then Exit Sub
trennzeichen(1) = " "
trennzeichen(2) = „-“
speicher = Target.Value
For i = 1 To UBound(trennzeichen)
temp = Split(speicher, trennzeichen(i))
speicher = „“
For j = 0 To UBound(temp) - 1
wort = temp(j)
wort = UCase(Left(wort, 1)) & Mid(wort, 2, Len(wort))
speicher = speicher & wort & trennzeichen(i)
Next j
wort = temp(UBound(temp))
wort = UCase(Left(wort, 1)) & Mid(wort, 2, Len(wort))
speicher = speicher & wort
Next i
hab mir mal schnell was ausgedacht, sollte so klappen.
nein. Bzw. von mir aus klappt es wie gedacht aber es hat starke Nebenwirkungen wie der Ausgangscode.
Versuche mal mit deinem Code am Laufen in A1 einzugeben =B1 o.ä.
Den Ausgangscode habe ich nur überflogen, mir ist unklar (neben einigem anderen) warum da die Schleife von 90-122 geht, Kleinbuchstaben stehen von 97-122!?
Und was ist mit ä,ö,ü?
Dein Grundansatz ist natürlich sehr okay, also gleich verschiedene Trenner einzuplanen.
z.Bsp.: max mustermann wird Max Mustermann
Ich benötige aber manchmal Bindestriche zwischen den Worten.
Hierbei wird nur das 1. Wort groß geschrieben.
z.Bsp.: max-mustermann wird Max-mustermann
Gibt es eine Möglichkeit dies zu ändern?
Hallo Heimat,
Modul: „Diese Arbeitsmappe“
Option Explicit
'
Private Sub Workbook\_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Zelle As Range
On Error GoTo hell
If Target.Value = "" Then Exit Sub
If Target.HasFormula Then Exit Sub
Application.EnableEvents = False
For Each Zelle In Target
Zelle.Value = Application.Proper(Zelle.Value)
Next Zelle
hell:
Application.EnableEvents = True
End Sub