VLookUpFunction VBA-不返回所需值

时间:2018-10-22 00:20:03

标签: excel vba

我目前处于机智状态,似乎无法理解为什么简单的vlookup函数无法正常工作。

Sub Button3_Click()

A = Textbox1.Value
B = ActiveWorkbook.ActiveSheet.Range("A1:G20")

BaneOfMyExistence = Application.WorksheetFunction.VLookup(A, B, 5, False)

BaneOfMyExistence = Textbox2.Value

End Sub

我已经浏览了很多论坛,很多人似乎都在担心vlookup函数的问题。不幸的是,我似乎找不到合适的解决方案。

我希望宏在textbox1中找到与数字变量的匹配项(行号列在A列中),然后将textbox2的值(也是数字)粘贴到BaneofMyExistence中。

我尝试了许多不同的方法/语法,这给我带来了许多不同的错误。但是,当前代码不会返回任何错误,也不会返回指定单元格中的任何值。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

您留下了许多未解决的问题,但我相信您正在尝试查找看起来像真数字列中的数字的文本。简而言之,99<>"99"

您没有进行变量声明,因此所有变量都隐式声明为变量。变体可以是真数字,也可以是文本或看起来像数字的文本。

A = Textbox1.Value

这将把一个字符串值放入A中,即使文本框中似乎有一个数字。字符串永远不会在一列真数字中匹配。

将B设置为您要查找的范围。您正在使用所使用的语法创建一个二维变量数组。

使用application.vlookup,您可以使用IsError测试“不匹配”。

您正在用Textbox2.Value中的值覆盖BaneOfMyExistence,我假设它是零长度的字符串。将此操作相反,可将vlookup中的值放入Textbox2中。

option explicit

Sub Button3_Click()

    dim A as long, B as range, BaneOfMyExistence as variant

    A = clng(Textbox1.Value)
    SET B = ActiveWorkbook.ActiveSheet.Range("A1:A20")

    BaneOfMyExistence = Application.match(A, B, 0)

    if not iserror(BaneOfMyExistence) then
        ActiveWorkbook.ActiveSheet.cells(BaneOfMyExistence, "E") = Textbox2.Value
    else
        ActiveWorkbook.ActiveSheet.cells(BaneOfMyExistence, "E") = "no match"
    end if

End Sub

使用Option Explicit,您会发现很多问题都消失了。