重命名具有特殊字符的单元格中的Excel工作表

我已经创build了复制“L2”中的值的macros代码,但我的问题是如果“L2”的值有一个特殊的字符,它给了我一个错误。 我知道在重命名工作表中不允许特殊字符的规则。

有没有办法绕过它? 说除了特殊字符,它复制(L2)的文本? 谢谢。

Sub Test() Range("L2").Select Selection.Copy Sheets("Sheet3").Select Sheets("Sheet3").Name = Range("L2") 

下面是我从“pivot”表中启动表的代码,需要根据Range(“L2”)中的值重新命名它们。

  Range("B2").Select Selection.ShowDetail = True Cells.Select Selection.RowHeight = 15 Range("L2").Select Selection.Copy Sheets("Sheet3").Select Sheets("Sheet3").Name = Range("L2") Sheets("pivot").Select Range("B3").Select Selection.ShowDetail = True Cells.Select Selection.RowHeight = 15 Range("L2").Select Selection.Copy Sheets("Sheet4").Select Sheets("Sheet4").Name = Range("L2") Sheets("pivot").Select Range("B4").Select Selection.ShowDetail = True Cells.Select Selection.RowHeight = 15 Range("L2").Select Selection.Copy Sheets("Sheet5").Select Sheets("Sheet5").Name = Range("L2") Sheets("pivot").Select Range("B5").Select Selection.ShowDetail = True Cells.Select Selection.RowHeight = 15 Range("L2").Select Selection.Copy Sheets("Sheet6").Select Sheets("Sheet6").Name = Range("L2") Sheets("pivot").Select Range("B6").Select Selection.ShowDetail = True Cells.Select Selection.RowHeight = 15 Range("L2").Select Selection.Copy Sheets("Sheet7").Select Sheets("Sheet7").Name = Range("L2") Sheets("pivot").Select Range("B7").Select Selection.ShowDetail = True Cells.Select Selection.RowHeight = 15 Range("L2").Select Selection.Copy Sheets("Sheet9").Select Sheets("Sheet9").Name = Range("L2") Sheets("pivot").Select Range("B8").Select Selection.ShowDetail = True Cells.Select Selection.RowHeight = 15 Range("L2").Select Selection.Copy Sheets("Sheet10").Select Sheets("Sheet10").Name = Range("L2") Sheets("pivot").Select Range("B9").Select Selection.ShowDetail = True Cells.Select Selection.RowHeight = 15 Range("L2").Select Selection.Copy Sheets("Sheet11").Select Sheets("Sheet11").Name = Range("L2") Sheets("pivot").Select Range("B10").Select Selection.ShowDetail = True Cells.Select Selection.RowHeight = 15 Range("L2").Select Selection.Copy Sheets("Sheet12").Select Sheets("Sheet12").Name = Range("L2") Sheets("pivot").Select Range("B11").Select Selection.ShowDetail = True Cells.Select Selection.RowHeight = 15 Range("L2").Select Selection.Copy Sheets("Sheet13").Select Sheets("Sheet13").Name = Range("L2") Range("L2").Select End Sub 

这两个函数都会返回一个干净的表单名称; 大小为31个字符或更less(最大工作表名称len)


 Option Explicit Public Function CleanWsName(ByVal wsName As String) As String Const x = vbNullString wsName = Trim$(wsName) 'Trim, then remove [ ] / \ < > : * ? | " wsName = Replace(Replace(Replace(wsName, "[", x), "]", x), " ", x) wsName = Replace(Replace(Replace(wsName, "/", x), "\", x), ":", x) wsName = Replace(Replace(Replace(wsName, "<", x), ">", x), "*", x) wsName = Replace(Replace(Replace(wsName, "?", x), "|", x), Chr(34), x) If Len(wsName) = 0 Then wsName = "DT " & Format(Now, "yyyy-mm-dd hh.mm.ss") CleanWsName = Left$(wsName, 31) 'Resize to max len of 31 End Function 

 Public Function CleanWsName2(ByVal wsName As String) As String Dim specialChars As Variant, i As Long specialChars = Split("[ ] / \ < > : * ? | " & Chr(34)) wsName = Trim$(wsName) 'Trim, then remove [ ] / \ < > : * ? | " For i = 0 To UBound(specialChars) wsName = Replace(wsName, specialChars(i), vbNullString) Next wsName = Replace(wsName, " ", vbNullString) If Len(wsName) = 0 Then wsName = "DT " & Format(Now, "yyyy-mm-dd hh.mm.ss") CleanWsName2 = Left$(wsName, 31) 'Resize to max len of 31 End Function 

从你的代码中调用它

 Worksheets("Sheet3").Name = CleanWsName(Worksheets("Sheet3").Range("L2").Value2) 

或者testing它

 wsName = CleanWsName2(" [ ] / \ < > : * ? | "" ") 

编辑

如果您不需要根据条件进行重命名(空白L2),则仅在L2不为空时调用该function:

 Public Sub TestWSRename() Dim ws As Worksheet For Each ws in Thisworkbook.Worksheets With ws If Len(.Range("L2").Value2) > 0 Then .Name = CleanWsName(.Range("L2").Value2) End With Next End Sub