2016-10-17 10 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

機能の代わりにサブを使用する必要がありますか?どんな値を返したいのではなく、いくつかのコマンドを実行するだけです。 – 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, _ 
       ... 
       ) 
関連する問題