我正在尝试使用双 VlookUp 构建一些 VBA 代码,但出现运行时错误“1004”:应用程序定义或对象定义错误。这样做的目标是:
我收到来自客户的 .csv 文件,其中包含数据:、、、、Login
等Name eMail
。我将 .csv 文件加载到工作表“数据”并运行 vlookup 以将数据复制到工作表“用户”。由于客户从不以相同的顺序构建 .csv 文件,因此我无法创建具有固定列号的 vlookup 以复制到工作表“用户”。我正在使用的代码:Card Number
Host Login
Sub browseFileTest()
Dim desPathName As Variant
Dim DestCell As Range
Dim iemail As Integer
Dim PosEmail As Integer
Dim icard As Integer
Dim Poscard As Integer
Dim ihost As Integer
Dim Poshost As Integer
Dim iemailD As Integer
Dim PosEmailD As Integer
Dim icardD As Integer
Dim PoscardD As Integer
Dim ihostD As Integer
Dim PoshostD As Integer
'Import file to worksheet Data
desPathName = Application.GetOpenFilename(fileFilter:="Excel Files (*.*), *.*", Title:="Please select a file")
If desPathName = False Then
MsgBox "Stopping because you did not select a file. Reselect a destination file through the menu"
Exit Sub
Else
With Sheets("Data").QueryTables.Add(Connection:= _
"TEXT;" & desPathName, Destination:=Sheets("Data").Range("$A$1"))
.Name = "users"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'Find cells position to 1º Vlookup
For iemail = 1 To Cells(1, 1).End(xlToRight).Column
If InStr(Cells(1, iemail), "Email") Then
PosEmail = iemail - 1
End If
Next
For icard = 1 To Cells(1, 1).End(xlToRight).Column
If InStr(Cells(1, icard), "CardNumber") Then
Poscard = icard - 1
End If
Next
For ihost = 1 To Cells(1, 1).End(xlToRight).Column
If InStr(Cells(1, ihost), "HostLogin") Then
Poshost = ihost - 1
End If
Next
Sheets("Data").Select
' Find cells position to 2ª Vlookup
For iemailD = 1 To Cells(1, 1).End(xlToRight).Column
If InStr(Cells(1, iemailD), "Email") Then
PosEmailD = iemailD - 1
End If
Next
For icardD = 1 To Cells(1, 1).End(xlToRight).Column
If InStr(Cells(1, icardD), "CardNumber") Then
PoscardD = icardD - 1
End If
Next
For ihostD = 1 To Cells(1, 1).End(xlToRight).Column
If InStr(Cells(1, ihostD), "HostLogin") Then
PoshostD = ihostD - 1
End If
Next
' Copy cells from Worksheet Data to WorkSheet Users
**With Sheets("Users").Range("A2", Sheets("Users").Cells(Rows.Count, "A").End(xlUp))
.Offset(, PosEmail).Formula = "=VLOOKUP(A" & .Row & ",'Data'!$A:$I,(,""" & PosEmailD & """ ),FALSE)"**
.Offset(, 1).Value = .Offset(, 1).Value
End With
End If
End Sub
你认为这可能吗?