检查 sheet 个名称以避免重复
Check sheet names to avoid duplicates
我正在开发一个宏,其中一部分接受用户的输入,询问 he/she 想要重命名 sheet。它工作正常,但如果用户提供的名称已被其他 sheet 使用,我 运行 会出现 运行 时间错误。我明白为什么会发生错误,但不确定如何警告用户并处理错误。
我的代码如下:-
'Change sheet name
Dim sheetname As String
sheetname = InputBox(Prompt:="Enter Model Code (eg 2SV)", _
Title:="Model Code", Default:="Model Code here")
wsCopyTo.Name = sheetname
有两种处理方法。
先捕获错误,检查是否有错误,并提出建议,然后将错误捕获恢复原状
Dim sheetname As String
sheetname = InputBox(Prompt:="Enter Model Code (eg 2SV)", _
Title:="Model Code", Default:="Model Code here")
On Error Resume next
Err.Clear 'ensure previously unhandled errors do not give a false positive on err.number
wsCopyTo.Name = sheetname
If Err.Number = ?? then 'go back and ask for another name
On Error Goto 0
其次,检查当前所有sheet名字,看有没有匹配
Dim sheetname As String
Dim sh 'as Sheet
sheetname = InputBox(Prompt:="Enter Model Code (eg 2SV)", _
Title:="Model Code", Default:="Model Code here")
for each sh in ActiveWorkbook.Sheets
If lower(sh.name)=lower(sheetname) then
'Goback and ask for another name
Next
wsCopyTo.Name = sheetname
首先循环遍历您拥有的名称,并将它们的名称与用户提供的名称进行比较。如果匹配,请写一条消息说已经使用过。之后退出子。
For i = 1 To ActiveWorkbook.Worksheets.Count
If Worksheets(i).Name = sheetname then
msgbox "This name is already in use!"
exit sub
End if
Next
最简单的方法是创建一个工作表变量并将其设置为用户输入的内容(您可能还想 Trim() 删除前导和尾随空格)。
如果它是 Nothing,那么 name 可以安全使用。如果 Not Is Nothing 那么它已经存在了。
Dim oWS As Worksheet
On Error Resume Next
Set oWS = ThisWorkbook.Worksheets(sheetname)
If oWS Is Nothing Then
' Safe to use the name
Debug.Print """" & sheetname & """ is save to use."
Err.Clear
wsCopyTo.Name = sheetname
If Err.Number <> 0 Then
MsgBox "Cannot use """ & sheetname & """ as worksheet name."
Err.Clear
End If
Else
Debug.Print """" & sheetname & """ exists already! Cannot use."
' worksheet with same name already!
' handle it here
End If
Set oWS = Nothing
On Error GoTo 0
您也可以将其置于循环中,直到找到未使用的工作表名称。
我刚刚写了一个 post 关于使用 Excel 的本机重命名 Sheet 对话框来执行此操作。这样你就可以对重复项、非法字符和太长的名称进行错误检查。这是添加 sheet 并调用对话框的例程。如果用户不重命名,则删除新的sheet:
Sub PromptForNewSheetWithName()
Dim DefaultSheetName As String
ActiveWorkbook.Worksheets.Add
DefaultSheetName = ActiveSheet.Name
Application.Dialogs(xlDialogWorkbookName).Show
If ActiveSheet.Name = DefaultSheetName Then
MsgBox "You didn't name the new sheet." & vbCrLf & _
"Processing cancelled", vbExclamation
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End If
End Sub
我正在开发一个宏,其中一部分接受用户的输入,询问 he/she 想要重命名 sheet。它工作正常,但如果用户提供的名称已被其他 sheet 使用,我 运行 会出现 运行 时间错误。我明白为什么会发生错误,但不确定如何警告用户并处理错误。
我的代码如下:-
'Change sheet name
Dim sheetname As String
sheetname = InputBox(Prompt:="Enter Model Code (eg 2SV)", _
Title:="Model Code", Default:="Model Code here")
wsCopyTo.Name = sheetname
有两种处理方法。
先捕获错误,检查是否有错误,并提出建议,然后将错误捕获恢复原状
Dim sheetname As String
sheetname = InputBox(Prompt:="Enter Model Code (eg 2SV)", _
Title:="Model Code", Default:="Model Code here")
On Error Resume next
Err.Clear 'ensure previously unhandled errors do not give a false positive on err.number
wsCopyTo.Name = sheetname
If Err.Number = ?? then 'go back and ask for another name
On Error Goto 0
其次,检查当前所有sheet名字,看有没有匹配
Dim sheetname As String
Dim sh 'as Sheet
sheetname = InputBox(Prompt:="Enter Model Code (eg 2SV)", _
Title:="Model Code", Default:="Model Code here")
for each sh in ActiveWorkbook.Sheets
If lower(sh.name)=lower(sheetname) then
'Goback and ask for another name
Next
wsCopyTo.Name = sheetname
首先循环遍历您拥有的名称,并将它们的名称与用户提供的名称进行比较。如果匹配,请写一条消息说已经使用过。之后退出子。
For i = 1 To ActiveWorkbook.Worksheets.Count
If Worksheets(i).Name = sheetname then
msgbox "This name is already in use!"
exit sub
End if
Next
最简单的方法是创建一个工作表变量并将其设置为用户输入的内容(您可能还想 Trim() 删除前导和尾随空格)。
如果它是 Nothing,那么 name 可以安全使用。如果 Not Is Nothing 那么它已经存在了。
Dim oWS As Worksheet
On Error Resume Next
Set oWS = ThisWorkbook.Worksheets(sheetname)
If oWS Is Nothing Then
' Safe to use the name
Debug.Print """" & sheetname & """ is save to use."
Err.Clear
wsCopyTo.Name = sheetname
If Err.Number <> 0 Then
MsgBox "Cannot use """ & sheetname & """ as worksheet name."
Err.Clear
End If
Else
Debug.Print """" & sheetname & """ exists already! Cannot use."
' worksheet with same name already!
' handle it here
End If
Set oWS = Nothing
On Error GoTo 0
您也可以将其置于循环中,直到找到未使用的工作表名称。
我刚刚写了一个 post 关于使用 Excel 的本机重命名 Sheet 对话框来执行此操作。这样你就可以对重复项、非法字符和太长的名称进行错误检查。这是添加 sheet 并调用对话框的例程。如果用户不重命名,则删除新的sheet:
Sub PromptForNewSheetWithName()
Dim DefaultSheetName As String
ActiveWorkbook.Worksheets.Add
DefaultSheetName = ActiveSheet.Name
Application.Dialogs(xlDialogWorkbookName).Show
If ActiveSheet.Name = DefaultSheetName Then
MsgBox "You didn't name the new sheet." & vbCrLf & _
"Processing cancelled", vbExclamation
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End If
End Sub