2017-02-17 5 views
0

두 번째 통합 문서를 열고 두 번째 통합 문서에서 VLOOKUP을 실행해야하는 스크립트를 작성하고 있습니다. 두 번째 통합 문서의 파일 이름이 "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

당신은 제대로 '에 대한 참조를 래핑 여부를 보여 FNAME을을 Debug.Print 수 : 수식이 더 같을 것이다, 그래서,하지만 당신은 또한, 수식 문자열의 워크 시트 이름을 포함해야합니까? 시트 이름의 공백으로 인해 수식이 유효하도록해야합니다. – 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 

이렇게하면 파일의 전체 경로가 반환됩니다.