gpt4 book ai didi

excel - 删除后识别为空 "Range"

转载 作者:行者123 更新时间:2023-12-02 11:04:29 24 4
gpt4 key购买 nike

我使用范围,有时给定对象中的所有单元格都会被删除 (Range.Cells.Delete)

我玩过并发现了这些:

  • 删除所有单元格后,变量类型仍为 Range 并且 Is Not Nothing
  • 调用其任何成员都会导致错误“需要对象”

这是我的小子来测试它:

Sub test()
Dim r As Range

Debug.Print r Is Nothing ' -> true
Set r = ActiveSheet.Range("a2")
Debug.Print TypeName(r) ' -> Range
r.Cells.Delete shift:=xlShiftUp
On Error GoTo ErrHandler
Debug.Print r Is Nothing ' -> False
Debug.Print TypeName(r) ' -> Range
Debug.Print r.Address ' -> "Err: Object required"
Debug.Print r.Cells.Count ' -> "Err: Object required"

Exit Sub
ErrHandler:
MsgBox "Err: " & Err.Description
Resume Next
End Sub

我的问题是:如何确定(希望没有错误处理)对象是否为空 Range

到目前为止我找到的最短选项:

Function IsEmptyRange(testRange As Range) As Boolean
If TypeName(testRange) <> "Range" Then
IsEmptyRange = False
Else
On Error GoTo EmptyRange
IsEmptyRange = testRange.Cells.Count = 0
If False Then
EmptyRange:
Err.Clear
IsEmptyRange = True
End If
End If
End Function

最佳答案

Daily Dose of Excel 上对此有一个有趣的讨论。指向类似的 Stack Overflow question 。 DDoE 没有给出“解决方案”,但关于“预期行为”的讨论很有启发性。 SO 帖子确实如此(作者:@DougGlancy),但它只是代码的一个版本(可能稍微好一点,因为不需要 If False then... 构造)。

在我看来,这里的最佳实践是记住在可以的情况下将引用变量设置为 Nothing。例如

Sub test()
Dim r As Range

Debug.Print r Is Nothing ' -> true
Set r = ActiveSheet.Range("a2")
Debug.Print TypeName(r) ' -> Range
r.Cells.Delete shift:=xlShiftUp

Set r = Nothing ' -> end of problem

On Error GoTo ErrHandler

Debug.Print r Is Nothing ' -> True

If Not r Is Nothing Then
Debug.Print TypeName(r) ' -> Range
Debug.Print r.Address ' -> "Err: Object required"
Debug.Print r.Cells.Count ' -> "Err: Object required"
End If

Exit Sub
ErrHandler:
MsgBox "Err: " & Err.Description
Resume Next
End Sub

趋势可能是让作用域处理清理工作(即,一旦 Sub 完成,r 将超出作用域),但最好这样做自己清理。

关于excel - 删除后识别为空 "Range",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46051135/

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