2016-07-21 29 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 
相关问题