Option Explicit
Option Compare Text
Dim rw As Long
Dim thisrow As Long
Dim c As Excel.Range
Dim str As String
Dim v As Variant
Dim iStart As Integer
Dim iEnd As Integer
Private Sub Worksheet_Change(ByVal Target As Range)
Const sPW As String = "$P$2"
Const sHide As String = "I:I, O:O"
If Not Intersect(Target, Range(sPW)) Is Nothing Then
If Target.Value = 1234 Then
ActiveSheet.Unprotect
'Range(sHide & 1).EntireColumn.Hidden = False
Range(sHide).EntireColumn.Hidden = False
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
ActiveSheet.EnableSelection = xlUnlockedCells
ElseIf Target.Value = "" Then
ActiveSheet.Unprotect
'Range(sHide & 1).EntireColumn.Hidden = True
Range(sHide).EntireColumn.Hidden = True
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
ActiveSheet.EnableSelection = xlUnlockedCells
End If
End If
With Target
Select Case True
Case .Column = 4
Range("A" & Target.Row) = Date
Case Not Intersect(Target, Range("E4:E500")) Is Nothing
For Each c In Intersect(Target, Range("E4:E500"))
' don't process - just remove the .
If Left(c.Value, 1) = "~" Then
str = Mid(c.Value, 2)
Else
str = StrConv(c.Value, vbProperCase)
' O'Leary, D'Alton,A'Courcey, N'Dou, De'Ath (really!)
If InStr(str, "o'") > 0 Or _
InStr(str, "d'") > 0 Or _
InStr(str, "a'") > 0 Or _
InStr(str, "n'") > 0 Or _
InStr(str, "de'") > 0 Then
iStart = InStr(str, "'") - 1
str = Left(str, iStart) & "'" & StrConv(Mid(str, iStart + 2), vbProperCase)
End If
' von Adler, van Dieman
If InStr(str, " von ") > 0 Or InStr(str, " van ") > 0 Then
iStart = InStr(str, " v") - 1
str = Left(str, iStart) & StrConv(Mid(str, iStart + 1, 4), vbLowerCase) & Mid(str, iStart + 5)
End If
' von der Recke - but the von has already been handled. 1 of the reasons this is not a 'Select Case' block
If InStr(str, " der ") > 0 Then
iStart = InStr(str, " der ") - 1
str = Left(str, iStart) & StrConv(Mid(str, iStart + 1, 4), vbLowerCase) & Mid(str, iStart + 5)
End If
' Hyphenated
If InStr(str, "-") > 0 Then
' Ignore if spaced already
If Mid(str, iStart + 2) <> " " Then
iStart = InStr(str, "-") - 1
str = Left(str, iStart) & "-" & StrConv(Mid(str, iStart + 2), vbProperCase)
End If
End If
' Let's just include a Mc
If InStr(str, " mc") > 0 Then
iStart = InStr(str, " mc") + 2
str = Left(str, iStart) & StrConv(Mid(str, iStart + 1), vbProperCase)
End If
' Never mind the de la, della and about 20 others but getting vanishingly small in numbers
End If
c.Value = str
Next
End Select
End With
Catch:
Application.EnableEvents = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveSheet.Unprotect
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub
Bookmarks