0

ダブル VlookUp を使用して VBA コードをビルドしようとしていますが、実行時エラー '1004': アプリケーション定義またはオブジェクト定義のエラーが発生します。これの目標は次のとおりです。

、、、、などのデータLoginを含む .csv ファイルを顧客から受け取りました。.csv ファイルをワークシート "Data" にロードし、vlookup を実行してデータをワークシート "users" にコピーします。顧客が同じ順序で .csv ファイルを作成することは決してないため、ワークシート「users」にコピーする固定列番号で vlookup を作成することはできません。私が使用しているコード:Name eMailCard NumberHost 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

これは可能だと思いますか?

4

1 に答える 1

2

問題は VLOOKUP の構文にあったようです。

VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

特に、col_index_numパラメータの構造。したがって

…:$I," & PosEmailD & ",FA...

それよりも

` …:$I,(,""" & PosEmailD & """ ),FA…

働いたようです。

(2 組の二重引用符、1 組の括弧、およびコンマの剰余)。

于 2013-09-06T17:03:22.963 に答える