【问题标题】:VBA vlookup formula errorVBA vlookup 公式错误
【发布时间】:2015-06-13 09:58:29
【问题描述】:

我是 excel 宏 vba 的新手。我的 vlookup 代码有问题,它引用了用户选择的另一个工作簿。

这是我的代码:

Private Sub vlookups()

Dim data_file_new As String
Dim i As Integer
Dim a As String, b As String, path As String

data_file_new = CStr(Application.GetOpenFilename(FileFilter:="Excel Workbooks (*.xls*),*.xls*", Title:="Select new data file for VLOOKUP"))

path = data_file_new

a = "=VLOOKUP(A:A,'[" & path & "]Source'!$A:$AB,28,0)"
b = "=VLOOKUP(A:A,'[" & path & "]Source'!$A:$AJ,36,0)"
i = 7

Do Until Sheets("Macro Template").Cells(i, 1) = ""

    Sheets("Macro Template").Cells(i, 37) = a
    Sheets("Macro Template").Cells(i, 38) = b

    i = i + 1
Loop

End Sub

我的问题是我的代码没有为 vlookup 提供正确的公式。相反,它给出了这个公式:

=VLOOKUP(A:A,'[E:\AP NO APPROVAL\[No Approval Monitoring Log_June 2015 xlsx.xlsx]Source]No Approval Monitoring Log_June'!$A:$AB,28,0)

正确的公式是这样的:

=VLOOKUP(A:A,'E:\AP NO APPROVAL\[No Approval Monitoring Log_June 2015 xlsx.xlsx]Source'!$A:$AB,28,0)

任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 当您尝试粘贴正确的公式时会发生什么?
  • 值显示正确。不适用
  • 你看过path中的实际值吗?尝试在为path 赋值的行上放置一个断点,看看它的值是多少。听起来它的值不正确
  • 它有所选文件的路径,包括文件名。但我不知道为什么它显示错误的公式
  • 首先"=VLOOKUP(A:A,'[" 应该是"=VLOOKUP(A:A,'" 其次。我想知道你是如何得到第一个公式的。您的第一个公式应该以 ]Source'!$A:$AB,28,0) 结尾,您能帮我重新检查一下吗?

标签: vba excel vlookup


【解决方案1】:

试试这个(未经测试

Private Sub vlookups()
    Dim ws As Worksheet
    Dim lRow As Long
    Dim sPath As String, sFile As String, sTemp As String
    Dim Ret

    Set ws = ThisWorkbook.Sheets("Macro Template")

    Ret = Application.GetOpenFilename(FileFilter:="Excel Workbooks (*.xls*),*.xls*", _
                                      Title:="Select new data file for VLOOKUP")

    If Ret = False Then Exit Sub

    sFile = GetFilenameFromPath(Ret)
    sPath = Split(Ret, sFile)(0)
    sTemp = "=VLOOKUP(A:A,'" & sPath & "[" & sFile

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        .Range("AK7:AK" & lRow).Formula = sTemp & "]Source'!$A:$AB,28,0)"
        .Range("AL7:AL" & lRow).Formula = sTemp & "]Source'!$A:$AJ,36,0)"
    End With
End Sub

Public Function GetFilenameFromPath(ByVal strPath As String) As String
    If Right$(strPath, 1) <> "\" And Len(strPath) > 0 Then
        GetFilenameFromPath = _
        GetFilenameFromPath(Left$(strPath, Len(strPath) - 1)) + Right$(strPath, 1)
    End If
End Function

解释

  1. Application.GetOpenFilename() 返回一个Variant。如上面代码所示处理。

  2. 您正在寻找的公式是=VLOOKUP(A:A,'E:\AP NO APPROVAL\[No Approval Monitoring Log_June 2015 xlsx.xlsx]Source'!$A:$AB,28,0)Ret 将为您提供一个直接的文件路径和名称E:\AP NO APPROVAL\No Approval Monitoring Log_June 2015 xlsx.xlsxVlookup 在文件名周围放置一个[]。您必须首先从文件路径中提取文件名并重建整个字符串。我们使用上面代码中的Function GetFilenameFromPath 来检索它。

  3. 您无需循环单元格即可输入公式。可以在ONE GO中全范围输入公式。

【讨论】:

    【解决方案2】:

    您没有指定公式所指的工作表。这就是问题所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多