我编写的Microsoft VBA搜索功能仅适用于4位数字(不是整数问题)

问题描述 投票:0回答:2

我已经使用 Microsoft VBA 中的用户表单和文本框编写了一个搜索功能,它在各个方面都按照我的预期工作,除了它不适用于超过 4 位数字的数字。最初我并不担心,因为我正在工作的网站没有大于 4 位数字的属性,但管理层对整个 Excel 印象深刻,并希望将其集成到其他以 5 位数字为属性的网站中(抱歉,如果我说得有点含糊,它搜索的是公司数据)。

评估我的代码,我能看到的唯一可能的原因是行

如果 UCase(Sheet3.Cells(row_no, field).Value >= UCase(Me.Textbox1.Value) 则 ...

或者可能是由于文本框在用户表单中的操作方式(我觉得它们可能被视为整数,但我不确定,我无法在网上找到任何这样的建议)。

如有任何帮助,我们将不胜感激。如果无法根据我提供的信息评估和解决问题,请通知我,我将删除该帖子并重新评估。

我将所有变量替换为整数变量,但它没有解决问题。网上研究了可能的原因或解决方案,但尚未找到。

excel vba userform
2个回答
0
投票

你的问题有点模糊。

此场景将单元格 A1 中的值 10 与文本框 1 中的值 10 进行比较。

代码将文本框中的 text 10 与单元格 A1 中的 number 10 进行比较,并返回 False。

Private Sub CommandButton1_Click()
    MsgBox Me.TextBox1 = Sheet1.Range("A1")
End Sub

将文本框值转换为数字返回 True:

Private Sub CommandButton1_Click()
    MsgBox CLng(Me.TextBox1) = Sheet1.Range("A1")
End Sub

或者,将工作表编号转换为文本也会返回 True:

Private Sub CommandButton1_Click()
    MsgBox Me.TextBox1 = CStr(Sheet1.Range("A1"))
End Sub

我希望你想要第一个例子,因为你似乎想看看一个数字是否大于另一个。


0
投票

你认为 TEXTbox 的值是什么类型? - 它是一个字符串,因此除非将其转换为 int/long 等,否则它将保留为字符串。 (转换;使用

CLng()
等函数(显式转换)或将值分配给具有适当类型的变量(隐式转换)。

比较值时,您必须小心它们的类型是否正确。这是因为字符串的比较与数字的比较不同。例如

"34" > "1000"
是 TRUE。

因此,请确保将类型转换为您需要的类型(在您的情况下为 int 和 long 等数字类型)。

不过你必须小心。特别是对于用户输入。如果您尝试转换无法表示为数字的字符串,您将收到运行时错误。为了防止这种情况发生,您应该在转换之前使用函数

IsNumeric()
。这样您可以确保用户输入在尝试转换时不会产生错误(下面是一个简单的示例)

Sub test(userInput As String)
    Dim i As Long
    
    If IsNumeric(userInput) Then
        i = CLng(userInput)
    Else
        MsgBox ("Pleas provide a number")
    End If
End Sub

您可以在代码中的任何点进行检查(只要是在转换之前且值不能再更改之后)

© www.soinside.com 2019 - 2024. All rights reserved.