Codeänderung Großschreibung

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

Hallo,

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

Target.Value = speicher
Application.EnableEvents = True

End Sub

Hallo Kai,
danke für die schnelle Hilfe.
Es klappt perfekt.

Grüsse heimat

Hallo power blue,
Danke. Klappt auch Bestens.
Gruss heimat

Hallo Power,

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.

Gruß
Reinhard

Ist doch kein Problem, Formel erkennt man am Gleichzeichen

erste Zeile nach den variable-Definitionen:

if left(target.formula,1)="=" then exit sub

im Code
Ist doch nur eine Zeile Zusatzcode, Formel erkennt man am Gleichzeichen:
Nach der Definition der Variablen eifügen

If Left(Target.Formula, 1) = „=“ Then Exit Sub

In Code:



Dim i, j As Integer

If Left(Target.Formula, 1) = „=“ Then Exit Sub

If Target.Value = „“ Then Exit Sub

trennzeichen(1) = " "
trennzeichen(2) = „-“

Ich klimper den Kram nur so nebenbei herunter, wenn ich grad Zeit hab - hab noch ne Arbeit für die ich bezahlt werde…

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

Gruß
Reinhard

Hallo Reinhaed,
es erscheint immer Fehler beim Kompilieren.
Gruß
heimat

es erscheint immer Fehler beim Kompilieren.

Hallo heimat,

sonst steht da im Fehlerfensterchen nichts?

Folgende Punkkte mußt du einhalten:

Die Anweisung „Option Explicit“ steht ganz oben im Modul. Und die Anweisung gibt es nur einmal im Modul?

Die Prozedur „Workbook_SheetChange“ gibt es nur nur einmal im Modul?

Die Zeile „Modul: Diese Arbeitsmappe“ steht nicht im Modul?

Gruß
Reinhard