2012-05-01 30 views
2

感謝您在過去提出的問題,我還有一個問題是我做了大量的研究,但沒有找到答案。如何爲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(Cells(.ActiveRow,「Column5」))'只能在With塊中工作。有一個嗎?你還需要在分配對象時使用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對象)。 VBA規則是您必須使用SET來分配它。

多年來,這是我最常見的VBA錯誤!

+0

解決了不匹配錯誤,但它現在說「無效或不合格的參考」並選擇「.ActiveRow」,我需要激活我的選擇嗎? – SpeedCrazy

+0

所有單元格都具有VALUE屬性,這就是我通常使用的。如果你想在自己的範圍,你需要: SET trtype = ActiveCell MSGBOX trtype ActiveCell.Value 不過,你不需要選擇單元格與它的工作(實際上這樣做會顯著減慢你的宏觀)。相反,您可以使用: MsgBox r.Value –