2012-02-26 21 views
6

vba(excel)のセルと範囲で少し混乱しています。論理的には、私はサイズ= 1の範囲としてセルを考えることができました。私はセルから範囲を作るのは簡単だと思います。Excel vba:範囲とセルを入力してください

EntireRowプロパティのAPIを読み取った場合here 範囲で動作します。しかし、「ループ内cell'variableを示す以下のコード作業は、範囲同時に

Set import = Sheets("import") 
    Set spRange = import.Range("A2") 
    Set spRange = import.Range("A2:" & spRange.End(xlDown).Address) 
    For Each cell In spRange 
     dict.Add cell.Offset(0, 2).Text, cell.EntireRow 
    Next cell 

で、以下のコードは、removecell関数を呼び出すときに型の不一致を示すエラーを返します。関数定義にはtargetCellの型はどうなりますか?

Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown)) 
For Each cell In spRange 
    val = removecell (cell) 
Next cell 


Public Function removecell(targCell As Range) As Boolean 
    removecell = False 
End Function 
+0

あなたが正しいです。セルは1項目の範囲です。型は 'Boolean'型の' val'ですか? – shahkalpesh

+0

はい。このメソッドは、以前に "cell.Text"を渡したときに動作していて、removeメソッドcellVal As Stringでそれを受け入れました。今私はセルの代わりにセルを渡すことによってセル(範囲)自体を渡そうとしています。テキスト – bsr

答えて

4

これは、コンパイルし、実行します:

Sub Tester() 
Dim spRange As Excel.Range 
Dim cell As Excel.Range 
Dim mySheet As Excel.Worksheet 
Dim val As Boolean 

Set mySheet = ActiveSheet 
Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown)) 
For Each cell In spRange 
    val = removecell(cell) 
Next cell 

End Sub 

Public Function removecell(targCell As Range) As Boolean 
    removecell = False 
End Function 
+0

ありがとう。私は明示的にセルを宣言していなかったので、 "Dim cell As Excel.Range"は私に手がかりを与えました。私が言及したように、私はちょうどメソッドを変換し、以前は明示的にセルを宣言する必要はありませんでした。私が得たエラーは少し誤解を招いていた。 – bsr

+2

Rangeオブジェクトのデフォルト値はValueであるため、CellがRangeとして宣言されていない場合、CellはValueと見なされます。これは、 "Type Mismatch"の原因となります。すべての変数を宣言することは非常に良い習慣です。これを強制するには、VBEでツール>オプション>エディタ>変数宣言を要求を選択します。これにより、Option Explicitがすべての新しいモジュールの先頭に追加され、宣言されていない変数に対して「変数が定義されていません」コンパイラエラーが発生します。また、Option Explicitを既存のモジュールの上部に入力することもできます。 –

+0

変数を宣言するには良いヒントを+1してください! –

関連する問題