具有VLOOKUP函数的ComboBox-Textbox链接值仅保留某些特定范围(并非所有范围)

时间:2019-01-22 03:25:38

标签: excel vba combobox textbox vlookup

我有1个组合框[Vendor_Number_CO_List]和1个文本框[Vendor_Name_Box_CO]。他们两个在excel中都有自己的Cells值“ B2:C15452”。我只想更改ComboBox,TextBox会自动遵循指向单元格中的值。 我正在使用VLOOKUP函数,但成功,但仅在“ C9887”下显示TrueValue,如果在C9887以上,则显示FalseValue ...文本框/单元格范围是否有任何限制?

我在VBA上是一个全新的人,我昨天才刚开始做这件事。我非常喜欢它。我想进行这种事情,所以请您帮忙解决这个问题。

我还尝试将范围缩短为:“ B2:C9887”,并且仅显示FalseValue。 “ C2:C9887”和“ C9887:15452”的唯一区别是其单元格值。 “数字”和“单词与数字的组合”。

这是我的代码,

Private Sub Vendor_Number_CO_List_Change()

    Dim c, d As Variant


    c = Vendor_Number_CO_List.Value
    d = Application.VLookup(c, _
        ThisWorkbook.Sheets("Vendor Database").Range("B2:C15452"), 2, False)

    Vendor_Name_Box_CO.Value = IIf(IsError(d), "Vendor Not Found.", d)

End Sub

我想当组合框的“ B2:B15452”中的指针值显示为Excel中的“ C2:C15452”值时。请您对此提供建议。

1 个答案:

答案 0 :(得分:0)

恭喜!除了您设计的错误条件外,您的代码似乎运行良好。那行不通。下面的代码显示了如何正确实现您的想法。

    Private Sub Vendor_Number_CO_List_Change()

        Dim c As Variant, d As Variant
        Dim Rng As Range

        c = Vendor_Number_CO_List.Value
        Set Rng = Sheets("Vendor Database").Range("B2:C15452")

        On Error Resume Next
        d = Application.VLookup(c, Rng, 2, False)
        If Err.Number Then d = "Vendor Not Found"
'        If Len(d) = 0 Then d = "Vendor Not Found"

        Vendor_Name_Box_CO.Value = d
    End Sub

VLOOKUP找不到部分单元格值。因此,未能在“ ABC-1234”中找到“ 1234”并不表示编码错误。您可以尝试实现以下逻辑。

  1. 如果找不到没有前缀的标准,则会发生错误。
  2. 如果发生错误,请将前缀添加到c并再次搜索。
  3. 仅如果仍然失败,请继续执行“找不到值”。

您对变量的命名可能会更加公平。 c可能没有足够的描述性,而Vendor_Number_CO_List可能过于描述性。如果避免使用下划线和全大写,则代码将更具可读性。