运行时错误'1004' - 对于VLOOKUP

时间:2013-09-04 23:02:30

标签: excel excel-vba syntax runtime-error vlookup vba

我正在尝试使用双VlookUp构建一些VBA代码但是我得到运行时错误'1004': 应用程序定义或对象定义的错误。这样做的目的是:

我收到来自客户的.csv文件,其中包含以下数据:LoginName eMailCard NumberHost Login等。我将.csv文件加载到工作表中“数据“并运行vlookup将数据复制到工作表”用户“。由于客户从未使用相同的顺序构建.csv文件,因此我无法创建具有固定列号的vlookup以复制到工作表“users”。我正在使用的代码:

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

你认为这是可能的吗?

1 个答案:

答案 0 :(得分:2)

看来问题出在VLOOKUP的语法上,应该是:

VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

特别是col_index_num参数的构造。因此

  

...:$ I,“& PosEmailD&”,FA ......

而不是

  

`...:$ I,(,“”“& PosEmailD&”“”),FA ......

似乎有效。

(两对双引号,一对括号和一个逗号余数)。