我正在尝试使用VBA将工作表中的某些数据传输到另一个工作表中,但是我被代码卡住了。基本上,在Sheet1中,我有以下几列来完成Sheet2中的数据:
A B C D E F
1 Month ID Country Name Surname Email
2
3
4
在Sheet2中,我有输入:
A B C D E F G
1 Month ID Address Telephone Surname Name Email
2 04-2018 2131 *** *** *** *** ***
3 04-2018 2133 *** *** *** *** ***
4 04-2018 2411 *** *** *** *** ***
在excel上,我将使用位于A2单元格中的以下函数:
=HLOOKUP(A$1,Sheet2!$A$1:$G$5,ROW(), FALSE)
效果很好。但是,在VBA上,以下函数报告错误:
Function hlookup()
Range("A2").Value = Application.hlookup(Range("A1"), Sheet2.Range("a1").End(xlDown).Select, 2, False)
End Function
运行时错误“ 1004”:
无法获取Range类的Select属性。
我知道问题出在范围内,但我找不到使它起作用的方法。
我是VBA的新手,我试图使其简洁明了,因此任何有关如何改进代码的建议都将被接受。
答案 0 :(得分:0)
如果您只想对列进行重新排序,则无需查找每一行。
Option Explicit
Public Sub CopyData()
Dim wsDest As Worksheet
Set wsDest = ThisWorkbook.Worksheets("Sheet1")
Dim wsSrc As Worksheet
Set wsSrc = ThisWorkbook.Worksheets("Sheet2")
Dim LastRow As Long
LastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row
Dim DestHeader As Range
Set DestHeader = wsDest.Range(wsDest.Range("A1"), wsDest.Cells(1, wsDest.Columns.Count).End(xlToLeft))
Dim SrcHeader As Range
Set SrcHeader = wsSrc.Range(wsSrc.Range("A1"), wsSrc.Cells(1, wsSrc.Columns.Count).End(xlToLeft))
Dim FoundCell As Range
Dim Cell As Range
For Each Cell In DestHeader
Set FoundCell = Nothing
On Error Resume Next
Set FoundCell = SrcHeader.Find(What:=Cell.Value, LookAt:=xlWhole)
On Error GoTo 0
If Not FoundCell Is Nothing Then
Cell.Offset(1).Resize(LastRow - 1).Value = FoundCell.Offset(1).Resize(LastRow - 1).Value
End If
Next Cell
End Sub