Excel UDF 在已关闭的工作簿中引用表以进行查找

Posted

技术标签:

【中文标题】Excel UDF 在已关闭的工作簿中引用表以进行查找【英文标题】:Excel UDF to reference table in closed workbook for lookup 【发布时间】:2018-04-19 11:40:45 【问题描述】:

我有一个有效的 UDF,它根据所选单元格的第一个字母分配用户名。字母表和用户名列表内置在 VBA 中的函数中,因此更新很繁琐,所以我正在寻找替代方法。

我在工作簿中创建了一个表格,任何人都可以更轻松地更新作业。我已经做了一些努力,但是我无法通过查找表格来让 UDF 正确分配用户名。下面是一种尝试,要么我偏离了目标,要么这无法完成。想法?

Function Test(Optional Cell As String) As String
Dim Name As Variant, Alpha As Variant, ATable As Variant
Dim i As Integer

If UCase(Left(Cell, 1)) = "A" Then
    Alpha = UCase(Left(Cell, 2))
Else: Alpha = UCase(Left(Cell, 1))
End If

ATable = Workbook("C:\filepath\").Worksheets("sheet1").ListObjects("ALPHA").DataBodyRange.Value

For i = LBound(ATable) To UBound(ATable)
    If ATable(i, 1) = Alpha Then
        Name = ATable(i, 2)
    End If
Next i

Test = Name

End Function

UDF 旨在用于任何打开的工作簿,而表工作簿将被关闭。

【问题讨论】:

工作簿必须打开才能成为Workbooks 集合的一部分。 如果有一个Workbook_OpenWorkbook_Activate 宏从外部表工作簿中检索最新表,将其复制到隐藏工作表,然后使用VLOOKUP,这不是更容易吗? ? 这可能是我必须走的路,但我试图以 UDF 的形式完成,因为这是最终用户的偏好。谢谢。 【参考方案1】:

    要从已关闭的工作簿中获取数据,您必须打开它 - Pulling data from a closed workbook macro

    UDF 无法打开工作簿。 Description of limitations of custom functions in Excel.

【讨论】:

我害怕什么。谢谢你的澄清。

以上是关于Excel UDF 在已关闭的工作簿中引用表以进行查找的主要内容,如果未能解决你的问题,请参考以下文章

当另一个工作簿处于活动状态时,UDF 引用命名表错误

请参阅其他工作簿中的 UDF 参数说明

Excel VBA 从关闭的工作簿中读取数据,带有 ADODB、动态范围和标题可选

当按 F9 [关闭]

excel跨工作簿引用同一位置单元格数据?

excel UDF在工作表中使用时不起作用