【发布时间】:2018-01-28 14:14:12
【问题描述】:
我对 VBA 很陌生。几个星期以来,我一直在尝试开发一个模仿 Excel 中的 vlookup 和 hlookup 函数的代码。
我正在构建一个宏,用于将数据从一个工作簿复制并粘贴到另一个工作簿中。
数据将在源工作簿和目标工作簿的左侧列中具有参考值。
目标工作簿中的参考值与源工作簿中的参考值的顺序不同。
要复制的数据将位于距离参考值 4 列的位置。数据(连同参考值)可以是数千行和数百列的长度。
目标工作簿和源数据所在的工作簿都将打开。
用户将在源工作簿和目标工作簿中指定引用值的位置。
用户还将指定要复制的数据范围
所有数据都将被复制。
这是我一直在处理的示例文件。我的实际数据会远远大于这个。数据从这里复制过来:Original Workbook
然后将数据粘贴到此工作簿中。目标工作簿看起来很相似,但您可以看到参考数据的顺序不同:Destination Workbook
此外,在同一张工作表中成功循环后(粘贴范围是同一工作簿中的同一张工作表),我收到此错误: 我还收到“运行时错误 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
提前致谢!
【问题讨论】:
标签: excel vba loops object copy-paste