excel 我需要在一本关闭的书中进行vlookup而不打开它,但我只得到#VALUE

ldioqlga  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(84)
Function csimplex(CODIGO As String)

    Dim rg As Range

    Set rg = Workbooks.Open("C:\Users\mvela\Documents\Prueba.xlsm").Worksheets("Simplex").Range("A:Z")

    csimplex = Application.WorksheetFunction.VLookup(CODIGO, rg, 3, False)

End Function
sc4hvdpw

sc4hvdpw1#

不能在VBA、VLOOKUP和EVALUATE中引用已关闭的工作簿。解决方法是快速打开工作簿,返回值,然后关闭工作簿。

Function csimplex(CODIGO As String) As Variant

    Dim wb As Workbook, rng As Range

    Set wb = Workbooks.Open("C:\Users\mvela\Documents\Prueba.xlsm", ReadOnly:=True)
    Set rng = wb.Worksheets("Simplex").Range("A:Z")

    csimplex = Application.VLookup(CODIGO, rng, 3, False)

    wb.Close SaveChanges:=False   `<~~ CLOSE THE WORKBOOK!

End Function

.XLSB比.XLSM小,加载、检索和关闭速度更快。如果你要做很多次,那么你可以建立一个静态数组并使用它。

ih99xse1

ih99xse12#

我甚至测试了它。打开你想要关闭的工作簿,在A列复制一个值,然后将其粘贴到你想要打开的工作簿的A1中,并将下面的代码放在B1中。关闭工作簿,看看它是否工作。这个错误意味着vlookup引用的列没有找到匹配的值。这通常意味着它是一个格式问题。

=VLOOKUP(A1,'C:\Users\mvela\Documents\[Prueba.xlsm]Simple‌​x'!$A:$Z,3,FALSE)

先看看这是不是问题所在。
我们可以试着用它。

=INDEX('C:\Users\mvela\Documents\
[Prueba.xlsm]Simplex'!$D:$D,MATCH(A1,'C:\Users\mvela\Documents\
[Prueba.xlsm]Simplex'!$A:$A,0))

试试这个,你可能会喜欢它更多:

Option Explicit

Function csimplex(CODIGO As String) As Variant

Dim wb As Workbook, rng1 As Range, rng2 As Range

Set wb = Workbooks("Prueba.xlsm")

Set rng1 = wb.Worksheets("Simplex").Range("A:A")
Set rng2 = wb.Worksheets("Simplex").Range("C:C")

On Error Resume Next

    csimplex = Application.Index(rng2, Application.Match(CODIGO, rng1, 0))

On Error GoTo 0

End Function

如果它是打开的。我有代码的一些地方。我会继续挖掘。

相关问题