Я очень новичок в VBA. Я уже несколько недель пытаюсь разработать код, который будет имитировать функции vlookup и hlookup в Excel.
Я создаю макрос, который копирует и вставляет данные из одной книги в другую.
Данные будут иметь эталонные значения в левом столбце как исходной книги, так и книги назначения.
Эталонные значения в целевой книге будут в другом порядке, чем эталонные значения в исходной книге.
Копируемые данные будут располагаться на расстоянии 4 столбцов от эталонных значений. Данные (вместе с эталонными значениями) могут состоять из тысяч строк и сотен столбцов.
Целевая рабочая книга и рабочая книга, в которой находятся исходные данные, будут открыты.
Пользователь укажет расположение эталонных значений как в исходной, так и в целевой книге.
Пользователь также укажет диапазон копируемых данных.
Все данные будут скопированы.
Вот пример файла, над которым я работал. Мои фактические данные будут намного больше, чем это. Данные скопированы отсюда: Исходная рабочая тетрадь
Затем данные вставляются в эту книгу. Целевая рабочая книга будет выглядеть аналогично, но вы можете видеть, что справочные данные расположены в другом порядке: Целевая рабочая книга< /а>
Кроме того, после успешного цикла на том же листе (где диапазон вставки — тот же лист в той же книге) я получаю эту ошибку: я также получаю «Ошибка выполнения 91. Переменная объекта или переменная блока не установлена». Это то, что я получил до сих пор:
> Sub copyv5input()
>
> Dim wsSrc As Worksheet Dim wbSrc As Workbook Dim wsTgt As Worksheet
> Dim wbTgt As Workbook Dim vRng1 As Range Dim vNo As Range Dim rNum As
> Integer Dim vRef1 As Range Dim vRng2 As Range Dim vDest1 As Variant
> Dim vDest2 As Variant Dim vDest3 As Range Dim cNum As Integer Dim
> cNum2 As String Dim vNew2 As Range
>
> rNum = 1
> cNum = 1
> Set vRng1 = Application.InputBox("Select the range of reference data:", Type:=8) '1
> Set vRef1 = vRng1.Cells(rNum, cNum) '1
>
>
>
> Set vRng2 = Application.InputBox("Select the reference data range for destination:", Type:=8) '2
>
>
>
> Set vDest1 = vRng2.Find(what:=vRef1) '2
> Set vDest2 = Range(vDest1.Address) '2
> Set vDest3 = vDest2.Offset(0, 1).Resize(, 4) '2
>
> Do While vRef1 <> ""
>
> Set vNo = vRef1.Offset(0, 4).Resize(, 4) '1
>
> If vRef1 = vDest1 Then
>
> vNo.copy Destination:=vDest3
>
>
> End If
>
> rNum = rNum + 1
>
> Set vRef1 = vRng1.Cells(rNum, cNum)
> Set vDest1 = vRng2.Find(what:=vRef1)
> Set vDest2 = Range(vDest1.Address) '2
> Set vDest3 = vDest2.Offset(0, 1).Resize(, 4)
> Loop
>
>
> End Sub
Заранее спасибо!