我是VBA的新手,从一开始我就遇到了一些问题。我想创建一个新的工作表,其名称与活动单元格中的值相同。我写了这样一个剧本:
Sub Makro1()
Dim country As String
Let country = ActiveCell.Value
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = country
End Sub
调试器点与ActiveSheet.Name = country
对齐。这段代码有什么问题?
答案 0 :(得分:3)
在命名工作表时,您必须牢记限制:
工作表的名称不能与已存在的名称相同 工作表。
工作表的名称不能超过31个字符。
不允许使用某些特殊字符:包括转发/盲文斜杠,方括号,问号,星号和冒号。
工作表名称可能还有其他限制,但我会立即想到这些限制因为我过去遇到过它们。
这是一个处理工作表名称验证的代码片段:
Function validateWSName(ByVal test_name As String) As String
'if name is blank, give a valid name to continue testing
If test_name = "" Then test_name = "wsName"
'if name is longer than 31 characters, then cut it off
If Len(test_name) > 31 Then test_name = Left(test_name,31)
'if name contains forbidden characters : \ / ? * [ or ] then eliminate them
test_name = Replace(test_name, ":", "")
test_name = Replace(test_name, "/", "")
test_name = Replace(test_name, "\", "")
test_name = Replace(test_name, "?", "")
test_name = Replace(test_name, "*", "")
test_name = Replace(test_name, "[", "")
test_name = Replace(test_name, "]", "")
'if name already exists in the worbook, then add a counter at the end
For Each ws In ThisWorkbook.Sheets
If ws.Name = test_name Then
keyName = ws.Name
counter = 1
test_name = test_name & counter
Do While test_name = keyName
If counter < 10 Then
test_name = Left(test_name, Len(test_name)-1) & counter
Else
test_name = Left(test_name, Len(test_name)-2) & counter
End If
counter = counter + 1
Loop
Exit For
End If
Next ws
validateWSName = test_name
End Function
如果您将此代码段添加到项目中并按以下方式重写代码,那么您在那里获得错误的可能性会因此而减少很多:
Sub Makro1()
Dim country As String
Let country = ActiveCell.Value
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = validateWSName(country)
End Sub