excel 我编写的微软VBA搜索函数只适用于4位数字(不是整数问题)

mlnl4t2r  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(103)

我已经在Microsoft VBA中使用用户表单和文本框编程了一个搜索功能,它在各个方面都像我打算的那样工作,保存它不适用于超过4位数的数字。最初我并不担心,因为我工作的网站没有大于4位数的属性,但管理层对Excel整体印象深刻,并希望将其集成到其他网站中,其中5位数是一个属性(对不起,如果我有点模糊,它搜索的是公司数据)。
评估我的代码,我能看到的唯一可能的原因是
如果UCase(Sheet3.Cells(row_no,field).Value >= UCase(Me.Textbox1.Value)则...
或者可能是由于文本框在用户表单中的操作方式(我觉得它们可能被视为整数,但我不确定,我还没有能够在网上找到任何建议)。
如果你能帮忙的话,我将不胜感激。如果这个问题不能从我提供的信息中得到评估和解决,那么只需通知我,我会删除帖子并重新评估。
我把所有的变量替换为整型变量,但它没有解决这个问题。在网上研究了可能的原因或解决方案,但没有找到任何。

d5vmydt9

d5vmydt91#

你的问题有点含糊。
此场景将单元格A1中的值10与textbox1中的值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


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

ajsxfq5m

ajsxfq5m2#

你认为文本框的值是什么类型的?- 它是一个字符串,所以除非你把它转换成一个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

字符串
可以在代码中的任何位置进行检查(只要是在转换之前和值不能再更改之后)

相关问题