2016-07-21 32 views
1

我有這樣的代碼:VBA確定地址之前的單元格?

localise = Cells.Find("Hello" , lookIn:=xlValues).Address 
MsgBox localise 

的MSGBOX給我$ A $ 10,但我想這一個前細胞,我怎麼能在VBA程序呢?

回答

1

採用Offset會得到你想要的東西。在這種情況下:

MsgBox localise.Offset(-1, 0).Address 

這會爲您提供相同的列,但找到的項目之前有一行。

您還需要在行Set localise = ...中使用Set以便獲得必要的對象引用並且不會生成Object Required錯誤。還建議不要假設您會找到您正在搜索的項目並處理這種情況。簡而言之:

Set localise = Cells.Find("Hello", LookIn:=xlValues) 
If Not localise Is Nothing Then 
    MsgBox localise.Offset(-1, 0).Address 
Else 
    MsgBox "Didn't find it" 
End If 
+0

除了本地化是一個'文本'。 – user3819867

+0

如果你能保證你會找到任何東西,這是很好的,否則你可能會得到一個錯誤。最好將'.Find'的響應設置爲一個範圍對象並對其進行處理 – Dave

+0

我從來沒有成功執行過第一個答案的「rng.Address.Offset」。你的編輯幾乎彌補了它。 – user3819867

2

使用膠印是一種選擇:

localise = Cells.Find("Hello", LookIn:=xlValues).Offset(-1, 0).Address

或者,如果你剛過$ A $ 9是並希望較少參與的方式則只要找到字符串中的第二個$,使這一權利入一個值並從它減去1。

+0

i循環throught片材,所以我不能使用$ A $ 9作爲恆定,我試圖:本地化= Cells.Find( 「你好」,找錢:= xlValues)。地址(FALSE,FALSE) -1但沒有工作 – JeanLo

+0

Dim localise_rng as range |設置localise_rng = cells.Find(「Hello」,lookIn:= xlValues)|設置localise_rng = localise_rng.offset(0,-1)| localize = localise_rng.adress – user3819867

+0

我認爲他想要之前沒有列的行。 –

2

開始你的最後一排的搜索和使用xlnext搜索方向(開始尋找行1)

誤解你的問題是找到第一次出現。仍然建議從第1行搜索,雖然,而不是假定該範圍存在 - 當前您的代碼做

Sub FindFirst() 
Dim Localise As Range 
Set Localise = Cells.Find("Hello", Cells(Rows.Count, "A"), xlValues, , , xlNext) 
If Not Localise Is Nothing Then MsgBox Localise.Offset(-1, 0).Address 
End Sub 
相關問題