Excel Vba细胞异常行为.对合并细胞的研究

wal*_*abe 5 excel vba find excel-vba

已解决:错误是由于在别处操纵find属性引起的

我对VBA世界很新,我对我遇到的Range .Find函数的一些异常行为有疑问.我有一些代码,我在子程序中调用如下.

For i = 2 To UBound(pullDataPckg)
        For j = 1 To UBound(section)
            Set cell = dataSheet.Cells.Find(What:=section(j))
           'Below returns nothing on call 2, works for call 1
           'Set cell = dataSheet.Cells.Find(What:="Value from section(j) in second call")

            If Not cell Is Nothing Then
              'Do some stuff
            End If
        Next
Next
Run Code Online (Sandbox Code Playgroud)

pullDataPckg并且section是两个字符串数组,dataSheet是一个工作表对象,代码都位于Sub我调用从工作表中提取数据值.

我遇到的异常行为Find总是返回单元格,因为Nothing我第二次调用sub(搜索的单元格是我知道的所有合并单元格,如果我取消单元格,那么find方法能够找到细胞).

但是,如果我改为使用,dataSheet.Range("A1:R999").Find(What:=section(j))则该方法成功找到该单元格.因此,Cells当与合并单元格一起使用时,问题似乎与属性有关.

我在同一工作表上调用sub两次,所以我添加了一个dataSheet.Cells.Find(What:="Known Value in section array of Second Sub Call")调用,发现在第一个Sub调用中执行时相同的代码成功找到了合并的单元格,而在第二个Sub调用中执行时却找不到合并的单元格(如果该单元未被合并,则它适用于两个调用).

我希望有人能够解释为什么find方法Cells只在第二个Sub调用中调用属性时才会失败,并且只能使用合并的单元格.由于测试值是硬编码的,可以使用Range属性/ 取消Find合并单元格,并且我将相同的工作表传递给两个调用我真的很难过,只有在搜索合并的单元格时方法才会失败.第二个电话.

编辑:有5个合并的单元格,每个单元格的宽度跨越A:R,高度为2.在循环开始之前,有一个对sub的调用,pullDataPckg通过打开工作簿填充数组,将工作簿中的信息拉入数组,然后关闭工作簿.从新工作簿中获取信息时,我调用Find()3次.

Tim*_*ams 1

任何Find()设置在调用之间都是持久的(就像您通过 UI 使用查找时一样)。

如果您的其他用途Find更改了除What您之外的任何参数,则应确保在任何后续调用中显式重置这些参数。

一般来说,最好明确包含Find可能影响结果的所有参数(例如LookAtLookIn