К счастью, вы обнаружите, что большинство из этих символов являются недействительными уже в качестве листа символов имени, т.е. *?[]
и т.д.
Но как вы уже сказали, используйте regexp :)
Что-то вроде ниже для возврата True
для действительных строк, False
для недействительных.
Я добавил ваши пункты выше, избегая специальных символов по мере необходимости.
[Обновлено: добавлена замена Function]
Sub TestCleanNames()
Dim StrArr()
Dim StrTst
StrArr = Array("Am i ok", "Sheet||a", "audited??", "Sheet1")
For Each StrTst In StrArr
MsgBox StrTst & " = " & ValidSheetName(CStr(StrTst)) & vbNewLine & CleanSheetName(CStr(StrTst))
Next
End Sub
действует функция имя
Function ValidSheetName(strIn As String) As Boolean
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
objRegex.Pattern = "[\<\>\*\\\/\?|]"
ValidSheetName = Not objRegex.test(strIn)
End Function
чистая функция
Function CleanSheetName(strIn As String) As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.Pattern = "[\<\>\*\\\/\?|]"
CleanSheetName = .Replace(strIn, "_")
End With
End Function
+1 вам не нужно будет проверять обратную косую черту, '/', '*' или '?', Потому что они запрещены именами таблиц рабочего листа. – JimmyPena
Я не был особенно ясен с моей формулировкой здесь - к сожалению, фактическое имя листа и имя, которое я имею в виду, разные - мое имя попадает в заголовок листа! Тем не менее, ответ Бреттджа очень хорош на этом, спасибо! – sgtpepper113