Excel Vba单元格的异常行为。在合并单元格上查找
已解决:错误是由于在其他地方操作find的属性造成的 我对VBA的世界非常陌生,我有一个问题,关于我所经历的范围Excel Vba单元格的异常行为。在合并单元格上查找,vba,excel,find,Vba,Excel,Find,已解决:错误是由于在其他地方操作find的属性造成的 我对VBA的世界非常陌生,我有一个问题,关于我所经历的范围.Find函数的一些异常行为。我有一些在子程序中调用的代码,如下所示 For i = 2 To UBound(pullDataPckg) For j = 1 To UBound(section) Set cell = dataSheet.Cells.Find(What:=section(j)) 'Below returns
.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
pullDataPckg
和section
是两个字符串数组,dataSheet
是一个工作表对象,代码都位于一个子中,我调用该子从工作表中提取数据值
我遇到的异常行为是,Find
在我第二次调用sub时总是以Nothing
的形式返回单元格(搜索的单元格都是我知道在工作表中的合并单元格,如果我取消合并单元格,则Find方法能够定位单元格)
但是,如果我改为使用dataSheet.Range(“A1:R999”).Find(What:=section(j))
则该方法成功地找到了单元格。因此,当与合并单元格一起使用时,单元格
属性似乎存在问题
我在同一工作表上调用了两次子调用,因此我添加了一个dataSheet.Cells.Find(What:=“第二个子调用的节数组中的已知值”)
call,并发现在第一个子调用中执行的同一代码成功地找到了合并的单元格,而在第二个子调用中执行的代码没有找到合并的单元格(如果该单元格未合并,则它可用于两个呼叫)
我希望有人能够解释一下为什么在第二个子调用中调用Cells
属性时,find方法失败,并且只使用合并的单元格。由于测试值是硬编码的,因此可以使用Range
属性/取消合并单元格来查找,并且我将相同的工作表传递给两个调用我正在处理的在第二次调用中搜索合并单元格时,Find
方法可能会失败,这真是让我摸不着头脑
编辑:共有5个合并单元格,每个单元格的宽度为a:R,高度为2。循环开始前,会调用子单元格,通过打开工作簿,将工作簿中的信息拉入数组,然后关闭工作簿来填充pullDataPckg
数组。从新工作簿我调用Find()三次。任何Find()
设置在调用之间都是持久的(就像通过UI使用Find时一样)
如果对Find
的其他使用更改了What
以外的任何参数,则应确保在任何后续调用中明确重置这些参数
一般来说,最好明确包含所有可能影响结果的Find
参数(如LookAt
,LookIn
等)无法复制结果(XL2013)使用一个简单的子对象和一个包含搜索值的合并区域。在第一次和第二次调用子对象之间,您是否使用Find()进行其他操作?如果您可以发布精确的步骤来重现所看到的内容(例如-合并的范围和数量等),这会有所帮助我也无法重现这一点。但其他调查人员需要注意的是:不要在VBE中为单元格添加手表,以检查其是否具有任何意外属性。显然,这让VBE确信它需要获取并存储表中每个单元格的值(或类似的内容)。刚刚通过达到100%内存使用率锁定了我的计算机…合并的范围有宽度(A:R)和高度(2)。在上述子部分中,我调用了另一个子部分,就在打开工作簿的循环将数据从工作簿拉入pullDataPckg数组,然后关闭工作簿之前。从工作簿中拉数据时,我使用Find().@wallabe-在这种情况下,您应该知道任何Find()
设置在调用之间都是持久的(就像您通过UI使用Find时一样)。如果对Find的其他使用更改了除What
以外的任何其他参数,则应确保在任何后续调用中显式重置这些参数。通常,最好显式包含所有参数,以查找可能影响结果的参数(例如lookat
,lookin
等)@Tim Williams啊,我不知道Find()
有这个属性。我添加了所有的值并将其设置为“看管单元格”(“A1”),这似乎解决了问题。有什么原因可以解释为什么在范围上调用Find时与在单元格上调用Find时不同?