|
本帖最后由 jaffedream 于 2017-6-17 15:48 编辑
andysky 发表于 2010-4-11 10:01
- Function look(查找值 As String, 区域 As Range, Optional 列 As Integer = 2, Optional 索引号 As Integer = 1) As String
- Application.Volatile
- Dim i As Long, cell As Range, Str As String
- With 区域(1).Resize(区域.Rows.Count, 1)
- If .Cells(1) = 查找值 Then Set cell = .Cells(1) Else Set cell = .Find(查找值, LookIn:=xlValues, Lookat:=xlWhole)
- If Not cell Is Nothing Then
- Str = cell.Address
- Do
- i = i + 1
- If i = 索引号 Then look = cell.Offset(0, 列 - 1): Exit Function
- Set cell = 区域.Find(查找值, cell, , xlWhole)
- Loop While Not cell Is Nothing And cell.Address <> Str
- End If
- End With
- End Function
复制代码
我测试了一下,这个自定义函数在跨簿引用时,如果引用的工作簿关闭,可以正常引用其单元格的内容,但不能引用其数据区域。使用微软内置的vlookup函数是都能引用的。如果把查找值 As String改成查找值 As range,那么跨簿单元格都无法引用(关闭引用工作簿的情况下),因此造成这个问题的原因,应该是Range所致,可能微软自带的函数中没有把区域定义为range?使用了其他对象?有没有办法使用其他对象替代range呢?我测试了好几种都不行,object的效果和range一样。
如附件中,在不打开1.xls时,2.xls里N2单元格引用了1.xls的数据区域,会出错,N8单元格采用了VLOOKUP就是正确值,没有更新的话要按F9刷新下。打开1.xls以后刷新,N2单元格就正常了,其他仅引用了1.xls单元格的公式始终正确。
|
|