在 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)"
我正在编写一个脚本,需要打开第二个工作簿并 运行 在第二个工作簿中进行 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)"