VBA输入Box-取消和变量设置

时间:2018-01-10 18:21:55

标签: excel vba excel-vba

以下是我的代码。我正在编写一个宏来在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

3 个答案:

答案 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