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输入框-取消和变量设置的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA取消输入框不返回false/exit sub