2017-02-17 16 views
0

2番目のワークブックを開き、2番目のワークブックでVLOOKUPを実行するスクリプトを作成しています。 2番目のブックのファイル名が "testlookup.xlsx"で、ファイル名を "hippity hop 1251225253.xlsx"に変更すると、 "Update Values:1251225253"というウィンドウが開き、VLOOKUPが失敗します。ファイル名に関係なくコードをどのように動かすことができますか?VBAでは、私のVLOOKUPは値を更新する必要があります

fpath = Application.GetOpenFilename(, , "Select the CMS All Assets exported CSV") 
fname = Dir(fpath) 

Workbooks.Open (fpath) 
Set openedBook = Application.ActiveWorkbook 
Set assetBook = openedBook.Worksheets(1) 
ActiveWindow.WindowState = xlMinimized 

checkWkbk.Activate 
With dupeSheet 
    'determine last row 
    lr = .Cells(Rows.count, 1).End(xlUp).Row 
    'vlookup from C2:CEnd 
    .Range(.Cells(2, 3), .Cells(lr, 3)).FormulaR1C1 = _ 
     "=VLOOKUP(RC[-2], " & CStr(fname) & "!C1:C2, 2, FALSE)" 
End With 
+0

debug.print fnameを使用して、参照が '?'に正しくラップされているかどうかを表示できますか?用紙名のスペースのために式が有効になるようにする必要があります。 – Zerk

答えて

1

ファイル名の説明が正しい場合は、ファイル名にスペース文字が含まれているため、VLookupがオフになっています。あなたは、このように、式にはファイル名の前後に単一引用符文字を配置する必要があります。

"=VLOOKUP(RC[-2], '" & CStr(fname) & "'!C1:C2, 2, FALSE)" 

あなたはファイル名にスペースを持っていないとき、それは作品言っ以来、私は、このビットをベースずれることがあり式の文字列にもワークシート名を含める必要があります。

"=VLOOKUP(RC[-2], '[" & CStr(fname) & "]" & assetBook.name & "'!C1:C2, 2, FALSE)" 
+0

これはうまくいった!ありがとうございました!私はこれが他のいくつかのスレッドの解決策であると言いましたが、コードは違っていて意味がありませんでした。しかし、それは今です! – DukeSilver

0

ActiveWorkbookを使用して、必要なブックを見つけて、適切な名前でブックを検索することがあります。私は、この目的のために、以下のサブルーチンを使用:するつもりはない。また

Get_Workbook_Object fPath, openedBook 

Dir()

Sub Get_Workbook_Object(sPath As String, wbHolder As Workbook) 
    Dim wb As Workbook 

    If Len(sPath) > 0 Then 
     ThisWorkbook.FollowHyperlink (sPath) 
    Else 
     Exit Sub 
    End If 

    For Each wb In Workbooks 
     If wb.FullName = sPath Then 
      Set wbHolder = wb 
      Exit Sub 
     End If 
    Next 
End Sub 

あなたのモジュールにサブルーチンを追加してからのようなもので、それを呼び出すことができ、このコードを使用するにはフルパスを返すと、適切なファイル名だけが返されます。たとえば、 "C:Users \ Hippity Hop.xlsx"の代わりに "Hippity Hop.xlsx"を返します。最初の部分は実際のファイルパスです。

With Application.FileDialog(msoFileDialogFilePicker) 
    .Title = "Please select the CMS All Assets exported CSV" 
    .Show 
    If .SelectedItems.Count = 1 Then 
     fpath = .SelectedItems(1) 
    Else 
     MsgBox "Please choose at least one file" 
     Exit Sub 
    End If 
End With 

これでファイルの完全パスが返されます。

関連する問題