我目前正在设计一个宏,该宏会从下拉列表中自动填充Excel中的表格。基本上,一张表中有200家公司。这有一个名为经理的字段(供管理公司的人员使用),其中包含一个下拉列表,其中列出了所有12位可能的经理姓名。当我选择一个经理时,它将公司名称填充到表的相应部分。
唯一的问题是我试图在VBA中使用VLookup来检索公司名称。因此,例如,如果我从第123行中选择一位经理,我想将“ C”列中的公司名称分配给 companyName 变量(然后将其插入自动填充表中。>
到目前为止,这是我的VLookup代码:
companyName = Application.WorksheetFunction.VLookup(ActiveCell.Address, Sheets("Companies").Range("C8:K208"), 1, False)
我已经看到了许多不同的方法来进行VLookups,通常我发现它们很混乱。每当它尝试进行查找时,它只会显示“ 运行时错误1004:无法获取WorksheetFunction类的VLookup属性”。
任何对这里出问题的帮助将不胜感激。自从我上次以任何形式查看Visual Basic以来已经有6年了,而且我没有使用Excel宏已有那么长时间了-非常抱歉,如果我遗漏了一些显而易见的东西!
答案 0 :(得分:0)
从VBA:Lookup_value是要在数组第一列中找到的值。 Lookup_value可以是值,引用或文本字符串。
请参阅您显然要使用的引用部分:在VBA中,引用为ActiveCell
,.range("A5")
或.cells(1, 2)
,而不是类似于Excel A1
或B7
等。
companyName = Application.WorksheetFunction.VLookup(ActiveCell, _
Sheets("Companies").Range("C8:K208"), 1, False)
或(至少在我的2003版本中)
companyName = Application.VLookup(ActiveCell, _
Sheets("Companies").Range("C8:K208"), 1, False)
但是我仍然不会玩ActiveCell
。
答案 1 :(得分:-1)
我的建议是不要在 VBA 中使用 VLookup。它很慢,但如果你的表只有大约 200 个条目,它应该是可以管理的。我要做的是将表读入以经理姓名为键的字典中,其中包含公司名称的值。
有一个无 VBA 的替代方案:将表格的格式从 |公司|经理| |:-|:-| |公司1|经理1| 等等。 到 |公司|经理|公司| |:-|:-|:-| |公司1|经理1|公司1| 等等。 现在你可以为 VLookup 做一个单元格公式