Аз съм много нов в 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
Благодаря предварително!