【发布时间】:2015-08-03 08:41:15
【问题描述】:
我正在尝试将vlookup 的用户定义函数创建到我机器上一个已关闭的工作簿中。以下函数在 VBA 中测试时有效,但在尝试使用该函数时,我在 Excel 中收到 #VALUE 错误。对此有什么想法吗?我相信我也许可以使用 VBA Evaluate 函数来提供帮助,但到目前为止还没有运气。
Function CUSIP_Deal_Map(CUSIP As String, DataField As String) As Variant
Dim colIndex As Integer ' for vlookup
Dim invalidDataField As Boolean
invalidDataField = False
' Switch statement, to transform from a "DataField" into a column number to be used in VLookUp
Select Case DataField
Case "Deal"
colIndex = 2
Case "Class"
colIndex = 5
Case "DealNum"
colIndex = 6
Case "Vintage"
colIndex = 11
Case "Pool"
colIndex = 12
Case "Index"
colIndex = 13
Case Else
invalidDataField = True
End Select
'Dim wbk As Workbook
Set wbk = Workbooks.Open("C:\CUSIP_Map.xlsx") 'hard code location
Dim VLU_data As Variant
VLU_data = wbk.Application.WorksheetFunction.VLookup(CUSIP, Worksheets("CUSIP_Map").Range("A:M"), colIndex, False) 'vlookup data from "database"
Call wbk.Close(False) 'close connection
' Return data
If invalidDataField Then
CUSIP_Deal_Map = "Invalid DataField"
Else
CUSIP_Deal_Map = VLU_data
End If
End Function
在 Excel 中的预期用途是使用像 =CUSIP_Deal_Map("123ABC","Deal") 这样的公式
我可以使用此代码在 VBA 中对此进行测试,该代码返回我期望的值:
Sub test()
MsgBox CUSIP_Deal_Map("123ABC", "Deal")
End Sub
不过,这在 Excel 本身中不起作用。我在网上找到了一个"pull" UDF,它似乎做了类似的事情,但为了我的目的修改它没有成功。
【问题讨论】:
-
那些 Select Case 值是否是已关闭 CUSIP_Map 工作表第 1 行的列标题标签?
-
@Jeeped 是的,这些是列标题