【问题标题】:Using Inputbox for Filter Criteria in VBA在 VBA 中使用输入框作为过滤条件
【发布时间】:2020-08-17 18:53:25
【问题描述】:

这可能很蹩脚,但我在使用输入框作为过滤条件时需要 VBA 帮助。我正在尝试使用下面的代码,用户需要将值放入 + & - 以相应地过滤范围。

在这种情况下,我尝试将 5 过滤为上限,将 -4.5 过滤为下限。我面临的困难是,当我为较低范围键入 -4.9、-4.8、-4.7 或 -4.6 时,该值被视为 -5,而当我使用 -4.5、-4.4、-4.3 等等直到 -4.1那么该值被认为是-4。我需要与我在输入框中输入的值完全相同。

Sub InputFilter()

    Dim iuval As Integer
    Dim ilval As Integer

    iuval = InputBox("Please enter the upper range")
    ilval = InputBox("Please enter the Lower range")


    Range("G1").Select
    ActiveSheet.Range("$A$1:$H$71").AutoFilter Field:=7, Criteria1:=">" & iuval, _
        Operator:=xlOr, Criteria2:="<" & ilval

End Sub

【问题讨论】:

    标签: excel vba filter criteria inputbox


    【解决方案1】:

    iuval 的数据类型更改为double,否则VBA 会自动将您的输入转换为integer,这意味着它会将您的输入转换为-4 或-5。

    Dim iuval As Integer 应该是Dim iuval As double

    Dim ilval As Integer 执行相同操作。

    【讨论】:

    • 实际上,由于InputBox 返回一个字符串,然后这些值仅被连接起来,您甚至可以将它们定义为String。此处使用数字数据类型的唯一目的是确保用户输入数字值。但是你有 IsNumeric 功能。
    • 我不确定这是否是更好的方法,因为我们在Criteria1:="&gt;" &amp; iuval 中有一个字符串比较,那么这可能会给出错误的结果。但是,为了安全起见,您应该在转换之前使用IsNumeric
    • 无论iuval 的类型是什么,Criteria1 都将是一个字符串(即:"&gt;-4.5")。然后是 Excel 引擎将这个字符串解析并解释为“大于数值 -4.5”。
    • 根据documentation criteria 是数据类型变体。但是,当然,在这种情况下,它是一个字符串,Excel 会进行解析。
    • 即使Criteria1 可以接受任何数据类型(这就是将其键入为Variant 的含义),"&gt;" &amp; iuval 在您将字符串 (">") 与其他任何内容连接时返回一个字符串.所以在这个上下文中参数Criteria1 的值将永远是一个字符串
    猜你喜欢
    • 2021-09-18
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2013-04-16
    • 1970-01-01
    相关资源
    最近更新 更多