【发布时间】:2012-01-25 07:49:54
【问题描述】:
我正在写一个相当大的宏
- 最后使用用户之前输入的名称保存工作簿。
- 我为此使用了工作表的标题,因此我需要删除任何会引发文件系统错误的保留字符
(/\*|?:<>")。
我想避免使用大量的Replace() 语句,那么有没有办法在一个语句中用下划线替换多个字符 - 更像是regexp?
谢谢大家!
【问题讨论】:
我正在写一个相当大的宏
(/\*|?:<>")。我想避免使用大量的Replace() 语句,那么有没有办法在一个语句中用下划线替换多个字符 - 更像是regexp?
谢谢大家!
【问题讨论】:
很高兴您会发现这些字符中的大多数已经作为工作表名称字符无效,即*?[] 等
但正如你已经说过的,使用regexp :)
如下所示返回 True 用于有效字符串,False 用于无效字符串。
我在上面添加了你的项目,根据需要转义特殊字符。
[更新:新增替换功能]
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
【讨论】:
/、* 或 ?,因为它们是禁止的工作表名称字符。
【讨论】: