在 Excel 中,我将某些项目名称与某些条形码编号相关联(例如 item1 00335578)。假设这些存储在电子表格中的 2 列中。
在另一个电子表格上,我想有一个具有自动完成功能的搜索框。例如,我的数据库中有两个项目 - item1 和 house2。当用户开始输入“it”时,可能的匹配项(在当前场景中为 item1)应该弹出(就像在 Google 搜索中一样),用户可以点击它们。
此字段旁边会有一个按钮 - “复制”。点击它将复制条形码我们搜索的相应项目(不是名称)。最好这还会将其粘贴到当前打开的另一个程序中(我很乐意就此提出建议)。
为了简单起见,我可以在设计中做出 2 点妥协,如果你们认为这太复杂,或者这种行为的实现明显是小题大做的话:
- 搜索框可以是下拉菜单,而不是具有自动完成功能的字段
- “复制按钮”可以简单地复制条形码号码,并让用户将其粘贴到其他打开的程序中。
这必须在 excel 中完成,我希望你能帮忙。我需要指导如何解决这个问题,我不指望有完整的解决方案(尽管,我必须承认,这会很有帮助 :D)
答案1
这是帮助您入门的一种方法。用户必须手动粘贴数据。
1 - 数据验证
选择单元格然后转到数据>数据验证. 设置来源添加到您想要包含的项目列表中。
在上面的例子中,我使用了命名范围和项目引用第一列:
2 - 具有指定宏的形状
第一张图片中的“按钮”只是一个带有指定宏的形状,它(1)获取所选项目的名称,(2)从样本源数据中查找条形码,然后(3)将条形码发送到剪贴板供用户查看。
这是我使用的代码。只需更改它以满足您的需求(物品在我的示例中指的是单元格 B2,产品参考样本源数据):
Sub Get_Barcode()
Dim objData As New DataObject
Dim barcode As String
barcode = Application.VLookup(Range("item"), Range("products"), 2, False)
objData.SetText barcode
objData.PutInClipboard
MsgBox "Barcode " & barcode & " copied to clipboard"
End Sub
使用时:
您可能需要添加参考到 Microsoft Forms 2.0 对象库才能使此代码正常工作。在 VBA 编辑器中,转到工具>参考>浏览并在那里检查。如果没有列出,你可能需要点击浏览并手动添加。在我的笔记本电脑上,它位于 C:\Windows\System32\FM20.DLL
。
答案2
您可以通过使用方法直接将数据发送到外部应用程序来增强上述宏Application.SendKeys
,而不是将其放入剪贴板。