为什么不是Range.Find方法find一个string的第一个实例?
在范围A1:I1
,确切的string“* ContactName”会出现两次 – 一次在A1
,再次在I1
。 这里是一个范围的图片的链接。
当我预期返回1时,我的代码返回9。
请有人解释为什么? 我已阅读微软的文档,但仍然无法弄清楚: 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
从链接到的文档,关于可选参数After
:
您希望search开始之后的单元格。 这对应于当从用户界面进行search时活动单元格的位置。 请注意,After必须是范围内的单个单元格。 请记住,search开始于此单元格之后; 指定的单元格不会search,直到方法回绕到此单元格。 如果不指定此参数,则search将在范围左上angular的单元格之后开始。
你没有提供一个After
因此在这种情况下,它默认为A1
。 请注意文档的部分说:“指定的单元格不search,直到方法回绕到这个单元格”。
如果你使用:
destinationCol = Range("A1:I1").Find("*ContactName", Range("I1")).Column
它会按照你的意图工作。
最好使用范围对象,并在返回列之前testing对象是否被find(否则代码将会出错)。
完全限定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