2016-10-17 67 views
-1

我试图做一个vba查找公式它的功能就像这样。VBA对象需要excel.range错误

Private Function setVlookUp(Optional startingRow As Long, _ 
        Optional endingRow As Long, _ 
        Optional column As Long, _ 
        Optional lookup_value_col As Long, _ 
        Optional table_Array As String, _ 
        Optional ByRef table_Array_FirstCell As Excel.Range, _ 
        Optional table_Array_SecondCell As Excel.Constants, _ 
        Optional col_num As Long, _ 
        Optional range_lookup As Long, _ 
        Optional isSetNumberFormat As Boolean = False, _ 
        Optional NumberFormat As String) 

    Dim rowCounter As Long 
    With mWorksheet 
     For rowCounter = startingRow To endingRow 
       .Cells(rowCounter, column).Value = "=VLOOKUP(" & .Cells(rowCounter, lookup_value_col).Address(False, False) & ",'" & table_Array & "'!" & table_Array_FirstCell & ":" & table_Array_SecondCell & "," & col_num & "," & range_lookup & ")" 
     Next rowCounter 
    End With 

,这是我调用该函数

Call setVlookUp(4, rowEnd, 4, 3, mArraySheetName(sheetCounter - 1, 0), .Cells(6, mArrayIntLocation(0, 0)).Address(False, False)) 

但,说:“所需的对象”错误。我找不到问题。

+0

你应该使用Sub而不是Function吗?你不想返回任何值,只需执行一些命令.. – lllpratll

+0

@lllpratll尝试使用子。我想这样做,所以我的同学们可以在需要时使用这段代码。 –

+0

你仍然可以传递参数到一个子,我没有看到问题.. – lllpratll

回答

2

当Function/Sub需要一个范围时,您正在传递一个字符串。

.Cells(6, mArrayIntLocation(0, 0)).Address(False, False) 

这将返回地址作为一个字符串(例如,字符串"A6")。要获取范围,只是删除.Address和使用

.Cells(6, mArrayIntLocation(0, 0)) 

当(这么多)的论点,特别是可选参数打交道时,我总是会在指定的函数调用的参数,以保持它的可读性,例如

Call setVlookUp(startingRow:=4, _ 
       endingRow:=rowEnd, _ 
       ... 
       )