gpt4 book ai didi

excel - Excel Range 奇怪行为的 SpecialCells 方法

转载 作者:行者123 更新时间:2023-12-02 16:15:13 24 4
gpt4 key购买 nike

我编写了一个宏,使用 Excel 范围对象的 SpecialCells 方法从某个范围中查找空白单元格。当我尝试执行以下代码时,出现“未找到单元格”的异常。

Sub test()
Debug.Print Sheet1.Range("A1:D4").SpecialCells(xlCellTypeBlanks).Address
End Sub

步骤:-

  1. 打开一个新的 Excel 实例。
  2. 按 ALT + F11/打开 VBE
  3. 插入新模块
  4. 粘贴上述代码并按照上面指定的方式运行测试宏。

收到的输出:

运行时错误“1004”。未找到细胞。

预期输出:

$A$1:$D$4

情况1:

现在如果我对单元格 A1 进行任何操作。诸如赋予填充颜色等操作。调用test()宏则不会抛出异常。

收到的输出:

1澳元

预期输出:

$A$1:$D$4

情况2:

假设我在单元格 B3 中给出任何值。调用test()宏,没有抛出异常。

收到的输出:

$B$1:$B$2,$A$1:$A$3

预期输出:

$A$1:$D$4

情况3:

如果我尝试编辑值或填充“A1:D4”范围之外的单元格(例如 E10)并执行 test() 方法,那么它会给我正确的输出。

收到的输出:

$A$1:$D$4

注意:使用新的 Excel 实例执行每个案例。

最佳答案

原因是 SpecialCells 在返回范围时“查看”UsedRange

因此,在未使用的工作表上使用 SpecialCells 将返回运行时错误“1004”。找不到单元格。 (顺便说一句,始终使用 SpecialCells 进行错误处理)

当您更改单元格 A1 时,它会变成工作表 UsedRange,因此案例 1 返回“A1”

下面的代码看起来返回 Range("A1:D4").SpecialCells(xlCellTypeBlanks)

  1. 一张白纸 - 失败
  2. 填写了 A10 的表格 - A1:A4
  3. A10 已清除的工作表 - A1:A4
  4. 使用范围重置(实际上是 1)的工作表 - 失败

    Sub Test()
    Dim ws As Worksheet
    Set ws = Sheets.Add
    On Error Resume Next
    'blank sheet
    Debug.Print "Blank sheet " & ws.Range("A1:D4").SpecialCells(xlCellTypeBlanks).Address
    'enter in A10
    ws.[a10] = "test"
    Debug.Print "With A10 " & ws.Range("A1:D4").SpecialCells(xlCellTypeBlanks).Address
    'clear a10
    ws.[a10].ClearContents
    Debug.Print "With A10 cleared " & ws.Range("A1:D4").SpecialCells(xlCellTypeBlanks).Address
    'reset range
    ActiveSheet.UsedRange
    Debug.Print "With A10 cleared and range reset" & ws.Range("A1:D4").SpecialCells(xlCellTypeBlanks).Address
    On Error GoTo 0
    End Sub

关于excel - Excel Range 奇怪行为的 SpecialCells 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11753405/

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