Excel VBAexception行为的细胞。找合并细胞
解决:错误是由于在其他地方操作find的属性造成的
我对VBA的世界很陌生,我对.Find
函数的一些exception行为有个疑问。 我有一些代码,我打电话在子程序如下。
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
pullDataPckg
和section
是两个string数组, dataSheet
是一个工作表对象,并且代码都位于我调用的从工作表中提取数据值的Sub
中。
我遇到的exception行为是, Find
总是返回单元格作为我的第二个子调用单元格(search的单元格都是合并单元格,我知道是在工作表中,如果我unmerge单元格然后查找方法是能够find细胞)。
但是,如果我改为使用dataSheet.Range("A1:R999").Find(What:=section(j))
那么该方法成功find该单元格。 所以这个问题似乎与合并单元Cells
一起使用时的Cells
属性。
我在同一个工作表上调用sub两次,所以我添加了一个dataSheet.Cells.Find(What:="Known Value in section array of Second Sub Call")
调用, dataSheet.Cells.Find(What:="Known Value in section array of Second Sub Call")
现在第一个Sub调用中执行的代码相同find了合并的单元格,而在第二个Sub调用中执行的时候,它找不到合并的单元格(如果单元格没有合并,它就可以用于这两个调用)。
我希望有人能够说明为什么find方法只在第二个子调用时只在合并的单元格中调用Cells
属性时失败。 由于testing值是硬编码的,可以使用Range
属性/取消合并单元格来find,而且我将同一个工作表传递给两个调用。我真的在挠挠我的脑海,以至于Find
方法只能在search合并小区在第二个电话。
编辑:有5个合并的单元格,每个具有跨越A:R和2的高度的宽度。就在循环开始之前有一个调用到子填充pullDataPckg
数组通过打开工作簿,从工作簿中提取信息进入数组,然后closures工作簿。 当从新工作簿中获取信息时,我会调用Find()3次。
任何Find()
设置在调用之间都是持久的(就像通过UI使用find一样)。
如果你对Find
的其他用途改变了除了你应该确保在任何后续调用中明确重置的参数以外的任何参数。
一般来说,最好明确地包含所有可能影响结果的参数(例如LookAt
, LookIn
等)