以下是我的代码。我正在编写一个宏来在excel报告的第一页上按下一个按钮,该按钮将根据用户使用的数量将用户带到报告中的不同选项卡。问题是如果我使用整数变量,如果用户取消框或命中x,则会发生错误。这个数字在床单方面工作得很好。但是,如果我将其调暗为Variant,则不再出现错误,但输入的数字不再有效。对于前者即使工作簿中有8个工作表,3也会显示无效的工作表框。我认为变体导致输入数字与整数格式不同?我想我可以使用错误恢复,但我只是想知道它会是什么样子。或者,如果有其他方法可以在不使用该方法的情况下执行此操作
Public Sub Summary_select()
Dim x As Integer
x = InputBox("Please Input The Sheet Number")
If Not (IsNumeric(x)) Then
MsgBox ("User Cancelled")
ElseIf x = 0 Then
MsgBox ("User Entered an Invalid Number of sheets")
ElseIf x > Sheets.Count Then
MsgBox ("User Entered an Invalid Number of sheets")
Else
Sheets(x).Activate
Range("A1").Select
End If
End Sub
答案 0 :(得分:2)
InputBox
会返回String
,因此Dim x as String
然后,一旦您确认它是数字且在正确范围内,请将其用作如下数字:
Worksheets(Val(x)).Activate
为你的支票做同样的事情:
ElseIf Val(x) = 0 Then
另外,为了批评你的代码,如果用户输入-1会发生什么?从技术上讲,这是数字,但无效。
而不是ElseIf Val(x) = 0 Then
你应该使用
ElseIf Val(x) < 1 Then
如果他们进入1.5怎么办?您可能还想检查它是否为整数:
If IsNumeric(x) Then
If Val(x) <> Int(x) Then
MsgBox "Please enter an Integer"
End If
End If
答案 1 :(得分:0)
您收到错误的原因是因为当用户点击输入框上的取消时,输入框会输出一个空 字符串 - 但问题是您的{{ 1}}声明不能接受字符串。
所以你可以按照以下方式做点什么:
Integer
如果在将输入框传递给On Error Resume Next
x = InputBox("Please Input The Sheet Number")
On Error Goto 0
时发生错误,则x
。
答案 2 :(得分:0)
虽然我对vba核心功能知之甚少,但我尝试修改现有代码以按照您想要的方式工作。放手一搏:
Public Sub Summary_select()
Dim x As String
x = InputBox("Please Input The Sheet Number")
If Not IsNumeric(x) Then
MsgBox ("User Cancelled")
ElseIf x = 0 Then
MsgBox ("User Entered an Invalid Number of sheets")
ElseIf x > Sheets.Count Then
MsgBox ("User Entered an Invalid Number of sheets")
Else
Sheets("Sheet" & x).Activate
Range("A1").Select
End If
End Sub