В Excel у меня есть определенные имена элементов, связанных с определенными номерами штрих-кодов (например, item1 00335578). Допустим, они хранятся в 2 столбцах электронной таблицы.

В другой таблице я хочу иметь окно поиска с функциями автозаполнения. Например, у меня есть два элемента в базе данных - item1 и house2. Когда пользователь начинает вводить "оно", должны появиться возможные совпадения (в текущем сценарии item1) (как в поиске Google), и пользователь может нажать на них.

Рядом с этим полем будет кнопка - "Копировать". При нажатии на него будет скопирован штрих-код соответствующего элемента, который мы искали (НЕ ИМЯ). Предпочтительно это также вставит это в другую программу, которая в настоящее время открыта (я был бы рад для предложений относительно этого).

Для простоты я могу сделать 2 компромисса в дизайне, если вы, ребята, думаете, что это слишком сложно, или что реализация такого поведения является очевидным излишним:

  1. Окно поиска может быть выпадающим меню вместо поля с функциями автозаполнения
  2. Кнопка "Копировать" может просто скопировать номер штрих-кода и оставить пользователя, чтобы вставить его в другую открытую программу.

Это должно быть сделано в Excel, я надеюсь, вы можете помочь. Мне нужно руководство о том, как подойти к этой проблеме, я не ожидаю полного решения (хотя, я должен признать, это было бы полезно:D)

2 ответа2

1

Вот один из подходов, чтобы вы начали. Пользователь должен будет вручную вставить данные.

1 - Проверка данных

Выберите ячейку и перейдите в « Данные» > « Проверка данных». Установите Source в список элементов, которые вы хотите включить.

В приведенном выше примере я использовал именованные диапазоны с элементами, ссылающимися на первый столбец:

2 - Форма с назначенным макросом

"Кнопка" на первом изображении - это просто фигура с назначенным макросом, который (1) берет имя выбранного элемента, (2) ищет свой штрих-код из исходных данных образца, а затем (3) отправляет штрих-код в буфер обмена для прочтения пользователя.

Вот код, который я использовал. Просто измените его в соответствии с вашими потребностями (элемент относится к ячейке B2 в моем примере, а products относится к образцу исходных данных):

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 .

1

Вы можете улучшить вышеуказанный макрос, напрямую отправляя данные во внешнее приложение с помощью Application.SendKeys вместо помещения его в буфер обмена.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .