gpt4 book ai didi

vba - Excel Vba 单元格的异常行为。在合并的单元格上查找

转载 作者:行者123 更新时间:2023-12-01 05:05:08 26 4
gpt4 key购买 nike

已解决:错误是由在别处操作 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
pullDataPckgsection是两个字符串数组, 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 次。

最佳答案

任意 Find()设置在调用之间是持久的(就像通过 UI 使用 find 时一样)。

如果您对 Find 的其他用途更改 What 以外的任何参数您应该确保在任何后续调用中明确重置它们。

通常,最好将所有参数显式包含到 Find。这可能会影响结果(例如 LookAtLookIn 等)

关于vba - Excel Vba 单元格的异常行为。在合并的单元格上查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38900713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com