在 VBA 中,我的 VLOOKUP 需要更新值

In VBA, my VLOOKUP needs to Update Values

我正在编写一个脚本,需要打开第二个工作簿并 运行 在第二个工作簿中进行 VLOOKUP。当第二个工作簿的文件名是 "testlookup.xlsx" 时,它工作得很好,但是当我将文件名更改为 "hippity hop 1251225253.xlsx" 时,它会打开一个 window,上面写着 "Update Values: 1251225253",然后 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

可能发生的部分情况是您使用 ActiveWorkbook 查找所需的工作簿,而不是使用正确的名称查找工作簿。为此,我使用以下子例程:

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

要使用此代码,您可以将子例程添加到您的模块中,然后使用类似以下内容调用它:

Get_Workbook_Object fPath, openedBook

此外 Dir() 不会 return 完整路径,它只会 return 适当的文件名。例如,它可能 return "Hippity Hop.xlsx" 而不是 "C:Users\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

这将 return 文件的完整路径。

如果您对文件名的描述是正确的,问题是您使用的文件名中包含 space 个字符,这会导致 VLookup 关闭。您需要在公式中的文件名周围放置 single-quote 个字符,因此:

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

我可能不太理解这一点,因为你说过当文件名中没有 spaces 时它可以工作,但你还应该在公式字符串中包含工作表名称,所以您的公式看起来更像这样:

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