我正在处理一个宏,其中一部分从用户那里获取他/她想要重命名表单的输入。它工作正常,但如果用户提供的名称已被其他工作表使用,则会遇到运行时错误。我理解为什么会出现错误,但我不确定如何警告用户并处理错误。
我的代码如下: -
'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
答案 0 :(得分:1)
有两种方法可以解决这个问题。
首先,捕获错误,检查是否有错误,然后建议,然后将错误捕获恢复到原来的状态
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
其次,检查所有当前工作表名称,并查看是否存在匹配
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
答案 1 :(得分:1)
我刚刚写了一篇关于使用Excel的原生重命名工作表对话框的帖子来做这件事。这样,您就可以对重复项,非法字符和太长的名称进行错误检查。这是一个添加工作表并调用对话框的例程。如果用户没有重命名,则删除新工作表:
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
答案 2 :(得分:0)
首先循环浏览您拥有的名称,并将其名称与用户提供的名称进行比较。如果匹配,请写一条消息说已经使用过。之后退出潜艇。
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
答案 3 :(得分:0)
最简单的方法是创建一个Worksheet变量并将其设置为用户输入的内容(您可能希望修剪()以删除前导和尾随空格。)
如果它没有,则名称可以安全使用。如果 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
您也可以将其放入循环中,直到找到未使用的工作表名称。