2016-10-17 63 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, _ 
       ... 
       )