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

Posted

技术标签:

【中文标题】VBA输入框-取消和变量设置【英文标题】:VBA input Box- cancel and Variable Setting 【发布时间】:2018-01-10 18:21:54 【问题描述】:

下面是我的代码。我正在编写一个宏来打开 Excel 报告第一页上的一个按钮,该按钮将根据用户使用的数字将用户带到报告中的不同选项卡。问题是如果我使用整数变量,如果用户取消该框或点击 x 则会发生错误。这些数字在这张纸上工作得很好。但是,如果我将其调暗为 Variant,则不再发生错误,但是输入的数字不再起作用。例如。 3 即使工作簿中有 8 张工作表,也会显示无效工作表框。我认为该变体导致输入数字的格式与整数不同?我想我可以使用 on error resume,但我只是想知道那会是什么样子。或者如果有另一种方法可以做到这一点而不使用该方法

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

【问题讨论】:

看这个:***.com/questions/44992958/… 【参考方案1】:

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

【讨论】:

感谢这就像一个魅力。我是 VBA 的新手,如果您在这种情况下使用输入框,希望返回的数字稍后在代码中使用,您是否总是需要做这样的事情? 如果您询问InputBox 是否总是返回String,答案是肯定的。如果您需要一个数值,则由您来验证它。 不错的答案,赞成。此外,“用户取消”框具有误导性。 If StrPtr(x) = 0 Then 将是显示此类 msgbox 的正确条件。 我对所有验证和可能的极端情况的研究越多,这就越像是一个专门的、经过适当单元测试的功能的工作...... @Mat'sMug 我根本不会使用 InputBox。我会制作一个带有组合框的用户表单,并用所有有效的工作表编号填充它,或者更好的是工作表名称。【参考方案2】:

您收到错误的原因是,当用户单击输入框上的取消时,输入框输出一个空 字符串 - 但问题是您的 @987654321 @ 声明不能接受字符串。

所以你可以按照以下方式做一些事情:

On Error Resume Next
x = InputBox("Please Input The Sheet Number")
On Error Goto 0

如果将输入框传递给x时发生错误,则x = 0

【讨论】:

【参考方案3】:

虽然我对 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

【讨论】:

以上是关于VBA输入框-取消和变量设置的主要内容,如果未能解决你的问题,请参考以下文章

vba 输入框维护取消

用户取消输入框后如何停止vba

Excel VBA取消输入框不返回false/exit sub

vba inputBox:如何用空文本框区分“取消”和“确定”之间的区别

VBA输入框(InputBox)

输入框提示信息的设置与输入框的焦点取消