|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 lyliuyouyang 于 2019-3-12 10:13 编辑
因为本人经常用到vlookup函数根据身份证号码匹配籍贯,所以想要自定义一个函数一劳永逸,我的思路是自定义函数里只有一个参数,就是需要提供的身份证号码的单元格,需要匹配的数据(就是对应的号码和籍贯)因为不会变化,所以就不当作参数,直接在自定义函数里去打开,写入字典里。但是发现在function自定义函数引用别的工作表时失败,请问在自定义函数的时候不能这种跨工作表操作吗?但是后面我又照着这个自定应函数写了一个sub过程,运行可以得到想要的结果,但是变成function就不行,麻烦大神帮忙看一下
自定义函数代码如下:
Function JG(r As Range)
Dim dic As Object
Dim wb As Workbook
Dim arr
Dim k$
Dim i%
'
Set dic = CreateObject("scripting.dictionary")
Set wb = Workbooks.Open(ThisWorkbook.Path & "\籍贯对照表.xlsx")
With wb.Sheets("籍贯")
arr = .Range("a1:b6000")
End With
wb.Close , 0
For i = 1 To UBound(arr)
k = arr(i, 1)
If Not dic.exists(k) Then
dic(k) = arr(i, 2)
End If
Next
k = Left(r.Value, 6)
If dic.exists(k) Then
JG = dic(k)
Else
JG = Null
End If
End Function
但是我写了一个JGJG的程序,运行都可以得到结果,代码的思路和自定义函数是一样的,代码如下:
Sub JGJG()
Dim dic As Object
Dim wb As Workbook
Dim arr
Dim k$
Dim i%
'
Set dic = CreateObject("scripting.dictionary")
Set wb = Workbooks.Open(ThisWorkbook.Path & "\.xlsx")
With wb.Sheets("籍贯")
arr = .Range("a1:b6000")
End With
wb.Close , 0
For i = 1 To UBound(arr)
k = arr(i, 1)
If Not dic.exists(k) Then
dic(k) = arr(i, 2)
End If
Next
k = Left(Range("b2").Value, 6)
If dic.exists(k) Then
Range("c2") = dic(k)
Else
Range("c2") = Null
End If
End Sub
所以到底问题在哪里
C:\Users\Laptop\Desktop\1.png
|
|