VLookup - Использование InputBox для определения расположения массива таблицы - PullRequest
1 голос
/ 25 сентября 2019

У меня есть таблица с множеством вкладок, каждая из которых связана с определенной датой.

Я хочу, чтобы макрос извлекал данные из столбца «Тема» из sheet1 и помещал их в sheet2.

Sheet1 определяется полем ввода, которое заполняется пользователем.

Например, пользователь наберет 9th September, чтобы перенести данные с одного листа на другой.

Я создал код, и он работает с использованием sheet1 и sheet2, однако мне бы хотелось, чтобы он немного адаптировался, как показано ниже:

  • Sheet1 = текущий активный лист (ActiveSheet не делает 'кажется, что он работает)
  • Sheet2 = Это будет сгенерировано в поле ввода («пин-код» в коде)

Sub Vlookup()

Dim pin As Variant
pin = VBA.InputBox("Enter Worksheet to lookup", "PIN")
If (pin = "") Then Exit Sub

[Sheet2!E2] = [VLOOKUP(Sheet2!A2, Sheet1!A1:X200, 5, FALSE)]

End Sub

1 Ответ

0 голосов
/ 25 сентября 2019

Это должно соответствовать вашим требованиям:

Sub Vlookup()

Dim pin As Variant
pin = InputBox("Enter Worksheet to insert", "PIN")
If pin = "" Then Exit Sub

Sheets(pin).Range("E2").Value2 = _
Application.WorksheetFunction.Vlookup(Sheets(pin).Range("A2").Value2, _
ActiveSheet.Range("A1:X200"), 5, False)

End Sub

Однако в вашем коде отсутствуют некоторые важные вещи, особенно проверка входных данных.Ваш код не проверяет ввод пользователя.Таким образом, если пользователь вводит что-то еще, кроме имени листа или просто вводит неправильные типы, ваш код будет нарушен.Простым решением будет использование обработчика ошибок.Более элегантное решение будет использовать UserForm вместо InputBox.На UserForm вы можете иметь выпадающий список, который показывает все имена рабочих листов и позволяет пользователю выбрать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...