Vba 边缘案例在IsNumeric中-这是过度思考吗
我有如下代码:Vba 边缘案例在IsNumeric中-这是过度思考吗,vba,excel,Vba,Excel,我有如下代码: Select Case IsNumeric(somevariable) Case True Resume Next Case False Call notnum Else Call MyErrorHandler End Select 这是不是想得太多了?IsNumeric是否有可能在此处返回除True或False以外的内容,或者这是一种糟糕的编程做法?不需要else,因为它将是True或False。不过,请
Select Case IsNumeric(somevariable)
Case True
Resume Next
Case False
Call notnum
Else
Call MyErrorHandler
End Select
这是不是想得太多了?IsNumeric是否有可能在此处返回除True或False以外的内容,或者这是一种糟糕的编程做法?不需要else,因为它将是True或False。不过,请注意,else应该是Case else(尽管在您即将删除它时没有意义) 基于此,我不会仅对两个选项使用案例:
If IsNumeric(somevariable) then
Resume Next
Else
Call MyErrorHandler
End if
编辑:以下是错误检查的工作原理:
Sub SheetError()
Dim MySheet As String
On Error GoTo ErrorCheck
MySheet = ActiveSheet.name
Sheets.Add
ActiveSheet.name = MySheet
MsgBox "I continued the code"
ActiveSheet.name = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
MsgBox "I will never get to here in the code"
End
ErrorCheck:
If Err.Description = "Cannot rename a sheet to the same name as another sheet, a referenced object library or a workbook referenced by Visual Basic." Then
Resume Next
Else
MsgBox "Error I am not designed to deal with"
End If
End Sub
将此模块复制并粘贴到您的个人工作簿或新工作簿中,然后运行它,使用F8逐行查看它实际上是如何处理错误的。不需要else,因为它将为真或假。不过,只需注意else应为Case else(尽管在您即将删除它时没有意义) 基于此,我不会仅对两个选项使用案例:
If IsNumeric(somevariable) then
Resume Next
Else
Call MyErrorHandler
End if
编辑:以下是错误检查的工作原理:
Sub SheetError()
Dim MySheet As String
On Error GoTo ErrorCheck
MySheet = ActiveSheet.name
Sheets.Add
ActiveSheet.name = MySheet
MsgBox "I continued the code"
ActiveSheet.name = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
MsgBox "I will never get to here in the code"
End
ErrorCheck:
If Err.Description = "Cannot rename a sheet to the same name as another sheet, a referenced object library or a workbook referenced by Visual Basic." Then
Resume Next
Else
MsgBox "Error I am not designed to deal with"
End If
End Sub
将此模块复制并粘贴到您的个人工作簿或新工作簿中,然后运行它,使用F8逐行查看它实际如何处理错误。根据OP的评论,我没有使用错误处理程序。我想做一些有希望的数字输出
或者,如果您想一直提示输入数字,直到用户正确输入或取消输入
Sub demo2()
Dim inputs As Variant
Do
inputs = InputBox("Enter something Numeric", "Title", "Default")
Loop Until IsNumeric(inputs) Or inputs = vbNullString
If Not inputs = vbNullString Then
' Do wht you want with numeric input inside the Else
End If
' Maybe do more stuff irrespective of input
End Sub
根据OP的评论,我没有使用我的错误处理程序。我想做一些有希望的数字输出
或者,如果您想一直提示输入数字,直到用户正确输入或取消输入
Sub demo2()
Dim inputs As Variant
Do
inputs = InputBox("Enter something Numeric", "Title", "Default")
Loop Until IsNumeric(inputs) Or inputs = vbNullString
If Not inputs = vbNullString Then
' Do wht you want with numeric input inside the Else
End If
' Maybe do more stuff irrespective of input
End Sub
输入框可以有不同类型的输入验证。试试这个
something = Application.InputBox("Pls Insert the Number", Type:=1)
If something = False Then Exit Sub
'Type:=0 A formula
'Type:=1 A number
'Type:=2 Text (a string)
'Type:=4 A logical value (True or False)
'Type:=8 A cell reference, as a Range object
'Type:=16 An error value, such as #N/A
'Type:=64 An array of values
输入框可以有不同类型的输入验证。试试这个
something = Application.InputBox("Pls Insert the Number", Type:=1)
If something = False Then Exit Sub
'Type:=0 A formula
'Type:=1 A number
'Type:=2 Text (a string)
'Type:=4 A logical value (True or False)
'Type:=8 A cell reference, as a Range object
'Type:=16 An error value, such as #N/A
'Type:=64 An array of values
isnumeric将仅返回布尔值。isnumeric从不发出error@ThomasShera使用
继续下一步
是不合适的。看我的answer@Nick.McDermaid这当然是人为的,但这个例子的要点是,对IsNumeric
的调用至少可能会触发错误,因此最不可能的是,这样的调用可能需要嵌入到错误处理程序中。是的,但那里没有错误处理程序,只是一个错误混淆器:)isnumeric将只返回布尔值。isnumeric从不发出error@ThomasShera使用继续下一步
是不合适的。看我的answer@Nick.McDermaid这当然是人为的,但这个例子的要点是,对IsNumeric
的调用至少可能会触发错误,因此最不可能的是,这样的调用可能需要嵌入到错误处理程序中。是的,但那里没有错误处理程序,只是一个错误混淆器:)所以我们在开始lol的地方结束了,我在这两个问题上,甚至没有意识到是同一个人。@DanDonoghue非常感谢,我仔细阅读了代码,我不知道关于将工作表重命名为与另一个工作表同名的小道消息。所以我们在开始lol的地方结束了,我对这两个问题都很了解,甚至没有意识到是同一个人。@DanDonoghue非常感谢,我仔细阅读了代码,我不知道用另一张表的名称重命名该表的小贴士。