2012-05-01 12 views
2

過去に私のn00bishの質問をしてくれてありがとう、私は広範な研究をして答えを見つけた別の質問があります。for文の行の列値を選択する方法は?

テーブルの行をループして特定の列の値を選択しようとしていますが、この時点でその値をMsgBoxに入れていますが、繰り返し試行が繰り返し失敗しました。

Dim id As Range 
Dim trtype As Range 

set id = Activesheet.Range("Table1[Column1]") 

For Each r In id 
    r.Select 
    Set trtype = .Range(Cells(.ActiveRow, "Column5")) 
    MsgBox trtype.Value 
Next r 

これは trtype = .Range(Cells(.ActiveRow, "Column5")が強調表示された行と "型の不一致" を返します。

この作品を作成する方法についてのご意見はありますか?

+0

'.Range(セル(.ActiveRow、" Column5 "))'は 'With'ブロック内でしか動作できません。 1つはありますか?また、オブジェクトを割り当てるときにsetを使う必要があります: 'Set trtype = .Range ...'。 – assylias

答えて

0

私はそれは次のようにして動作するようになった:

For Each r In id 
    r.Select 
    trtype = Selection.Text 
    MsgBox trtype 
Next r 

設定を使用するときの議論に私を導いたセットについての答えを右のトラックに私を取得するためのおかげで、と発見それはオブジェクトのみであり、文字列は.Textで設定しなければならなかった。.Value

+0

私の答えにコメントを参照してください。 –

1

あなたはラインで設定した単語を逃しました:

trtype = .Range(Cells(.ActiveRow, "Column5")) 

trtypeは(Excelの組み込みオブジェクトを指すすなわち1)オブジェクト変数です。 VBAルールは、SETを使用して割り当てる必要があるということです。

長年にわたり、これは私の最も一般的なVBAエラーでした!

+0

これはミスマッチエラーを解決しましたが、現在は「無効または非修飾参照」と表示され、 '.ActiveRow'が選択されます。選択を有効にする必要がありますか? – SpeedCrazy

+0

すべてのセルにVALUEプロパティが設定されています。これは通常使用しているものです。範囲自体を取得する必要がある場合: SET trtype = ActiveCell MsgBox trtype ActiveCell.Value しかし、実際にそれを行うにはセルを選択する必要はありません。あなたのマクロを遅くする)。代わりに、あなたはちょうど使用することができます: MsgBox r.Value –

関連する問題