2012-01-27 55 views
0

,当我使用这个VB代码#价值!使用宏

Public Function LastVersionOwned(rCol As Range, versionOwned As Range) As Range 
    Set LastVersionOwned = Application.WorksheetFunction.Lookup(2, 1/(rCol = rCol.Find("*", rCol.Cells(1), , , , xlPrevious)), versionOwned) 
End Function 

什么是supossed做的是找到最后一个非空行的范围,然后使用该值来获得该行的头,但是当我使用它,它返回#VALUE! RCOL是范围(在这里我想要得到的最后一个非空值,例如,12行的列表:F12)和versionOwned是表的表头(也一个范围,但静态C11:F11)

如果我使用像这样

Public Function LastVersionOwned(rCol As Range) As Range 
    Set LastVersionOwned rCol.Find("*", rCol.Cells(1), , , , xlPrevious) 
End Function 

而在Excel中我=LOOKUP(2,1/(C12:F12=LastVersionOwened(C12:F12)),C$11:F$11) 它的工作,任何想法我怎么能修复这个bug?

感谢

+0

我很困惑什么你正在尝试做的。例如:您可以找到列A中最后一个空单元格,比如说A100。那么你使用这个值来做什么? “获得该行的标题”是什么意思? – JimmyPena 2012-01-27 18:14:17

+0

我试图找到一行中的最后一个非空单元,例如(在A2:F2的范围内,最后一个非空单元可能是C:2),C2单元有一个头,假设行A1:F1的头是asdfgh,所以如果最后一个非空单元是C2,我想得到C1头将是D – user1112251 2012-01-27 18:18:17

回答

2

我认为问题是,你比较一个“阵列到阵列”的公式,并尝试做在VBA同样的事情,这是不可能的,因为你确实比较一个RangeRange 。而要真正比较VBA中的'阵列到阵列'将会更长一些。所以我想出了为你工作的替代...

Public Function LastVersionOwned(rCol As Range, versionOwned As Range) 
    LastVersionOwned = Application.WorksheetFunction _ 
     .Lookup(rCol(1, rCol.Columns.Count).End(xlToLeft).Value, rCol, versionOwned) 
End Function 

让我知道这是否适合您的需要

+0

非常感谢!我帮了我很多:) – user1112251 2012-01-27 19:16:55