在A1:I1
范围内,确切的字符串“* ContactName”会出现两次 - 一次出现在A1
中,另一次出现在I1
中。 Here is a link to a picture of the range.
当我期望返回1时,我的代码返回9。
请有人解释原因吗?我已经阅读了Microsoft的文档,但仍然无法弄明白:https://msdn.microsoft.com/en-us/library/office/ff839746.aspx
Sub FindCol()
Dim destinationCol As Integer
destinationCol = Range("A1:I1").Find("*ContactName").Column
MsgBox destinationCol
End Sub
如果我改变代码从第一列开始,那么,正如预期的那样,该方法循环返回并返回1(A列)。
Sub FindCol()
Dim destinationCol As Integer
destinationCol = Range("A1:I1").Find("*ContactName", after:=Cells(1, 9)).Column
MsgBox destinationCol
End Sub
答案 0 :(得分:3)
从您链接的文档中,了解可选参数After
:
您希望搜索开始的单元格。这对应于 从用户进行搜索时活动单元格的位置 接口。请注意,After必须是范围内的单个单元格。 请记住,搜索在此单元格之后开始;指定的单元格 没有被搜索,直到该方法回绕到这个单元格。如果你 不指定此参数,搜索在单元格之后开始 范围的左上角。
您没有提供After
因此在这种情况下默认为A1
。请注意文档中的部分说明"指定的单元格不会被搜索,直到方法回绕到此单元格。"
如果您使用:
destinationCol = Range("A1:I1").Find("*ContactName", Range("I1")).Column
它会按你的意愿运作。
答案 1 :(得分:0)
最好使用范围对象并测试在返回列之前是否找到对象(否则代码将出错)。
还可以更好地完全限定Find
参数(在这种情况下,在范围中的最后一个单元格之后开始,即在 I1 之后开始)
Sub FindCol()
Dim rng1 As Range
Set rng1 = Range("A1:I1").Find("*ContactName", [i1], xlFormulas, , xlNext)
If Not rng1 Is Nothing Then MsgBox rng1.Column
End Sub