我已经使用 Microsoft VBA 中的用户表单和文本框编写了一个搜索功能,它在各个方面都按照我的预期工作,除了它不适用于超过 4 位数字的数字。最初我并不担心,因为我正在工作的网站没有大于 4 位数字的属性,但管理层对整个 Excel 印象深刻,并希望将其集成到其他以 5 位数字为属性的网站中(抱歉,如果我说得有点含糊,它搜索的是公司数据)。
评估我的代码,我能看到的唯一可能的原因是行
如果 UCase(Sheet3.Cells(row_no, field).Value >= UCase(Me.Textbox1.Value) 则 ...
或者可能是由于文本框在用户表单中的操作方式(我觉得它们可能被视为整数,但我不确定,我无法在网上找到任何这样的建议)。
如有任何帮助,我们将不胜感激。如果无法根据我提供的信息评估和解决问题,请通知我,我将删除该帖子并重新评估。
我将所有变量替换为整数变量,但它没有解决问题。网上研究了可能的原因或解决方案,但尚未找到。
你的问题有点模糊。
此场景将单元格 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
我希望你想要第一个例子,因为你似乎想看看一个数字是否大于另一个。
你认为 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
您可以在代码中的任何点进行检查(只要是在转换之前且值不能再更改之后)