【问题标题】:ComboBox-Textbox Linked Values with VLOOKUP Function Only keep some certain range (Not all Range)具有 VLOOKUP 功能的 ComboBox-Textbox 链接值仅保留某些特定范围(不是所有范围)
【发布时间】:2019-06-15 11:37:51
【问题描述】:

我有 1 个 ComboBox [Vendor_Number_CO_List] 和 1 个 TextBox [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”值。请你的人就此提出建议..

【问题讨论】:

  • 最近我在“C”单元格值前面添加了一些“Word(非数字)(A1000)”,它是成功的。如果我删除它(1000)它会显示“未找到供应商”。

标签: excel vba combobox textbox vlookup


【解决方案1】:

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

    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 可能描述性太强。如果您避免使用下划线和全大写,您的代码将更具可读性。

【讨论】:

  • 这真的很感激,@Variatus。我真的需要在编码逻辑中学到很多东西。我从你的回复中学到了很多东西。 Yupp 可能需要提高我的命名技巧哈哈。先生,这是有名的。这真的对我有很大帮助。非常感谢。
  • Application.VLookup 如果找不到匹配项,则不会引发运行时错误,因此不需要On Error Resume Next - 错误将在返回值中。
  • 这是著名的@TimWiliams 先生。非常感谢您提供此信息以及您之前对我之前问题的回复。如果您注意到我使用的代码来自您之前的建议,呵呵。再次感谢
  • VLOOKUP 在我的 Excel 2010 中确实返回了 #N/A 错误,至少在从工作表调用时是这样。如果在较新的版本中不再发生这种情况,或者在作为应用程序函数调用时不再发生,则可能会删除错误陷阱并检查返回值的长度以确定是否找到了值。为了您的方便,我在解决方案中的代码中添加了这样一行。
猜你喜欢
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多