【问题标题】:VBA Range variable gone after cut剪切后VBA范围变量消失
【发布时间】:2019-05-30 00:24:08
【问题描述】:

424 错误。有人能告诉我为什么范围变量在剪切后消失了吗?

with sheets(1)
Dim des as range
set des = .range("A15")
.range("A1:A3").cut des
msgbox(des.row+5)
end with

【问题讨论】:

    标签: excel vba range


    【解决方案1】:

    看起来.paste 出于@GSerg 的原因正在清除范围变量。

    使用此代码是可行的,但如果你在最后打破它,变量会一直存在,直到粘贴发生。

    With Sheets(1)
        Set des = .Range("A15")
        .Range("A1:A3").Cut
        des.Cells(1, 1).Select
        MsgBox (des.Row + 5)
        ActiveSheet.Paste
    End With
    

    如果您将消息框移到粘贴之后,它会清除 des,即使它没有像您的那样在剪切中使用。

    我会做更多的调查。 des 对象仍然作为 range 存在,但只是未填充。

    这个方法也做了 cut 会做的事情

    Dim src As Range
    Dim des As Range
    
    With Sheets(1)
    
        Set src = .Range("a1:a3")
        Set des = .Range("a15")
        des.Resize(src.Rows.Count, src.Columns.Count).Value = src.Value
        src.Clear
    
    End With
    

    【讨论】:

    • 最终我通过复制和清除使用了相同的替代方法。
    【解决方案2】:

    Range 对象存储对特定单元格的引用,而不是特定地址。当引用的单元格移动时,Range 对象将跟随。例如。如果您存储 Range("B1"),然后在 A 和 B 之间插入一列,您的变量现在将具有 Range("C1"),因为您的 B1 已向右移动。

    当被跟踪的单元格不复存在时,Range 实例将变得不可用。

    剪切完全替换了实际的单元格,而不是简单地覆盖它们的内容,因此您的Range 正在跟踪的单元格不再存在,而其他一些单元格现在将假定地址为A15。不过那是一个不同的单元格,所以你的 Range 实例已经消失了。

    一个值得注意的例外是当您只销毁Range 的一部分时。在这种情况下,Range 接受新单元格并保持其形状。例如。如果您存储Range("A15:A20") 并在A15 上剪切Range("A1:A3"),则结果范围仍为A15:A20

    【讨论】:

    • 复制不也会改变目标单元格吗? .range("A1:A3").copy des msgbox(des.row+5) 可以正常工作。
    • @KuanChunYeh 它改变了他们的状态,而不是他们的存在。如果您将A1:A3 存储到另一个变量中,例如source As Range,你会看到在Cut source 移动到A15:A17,但在Copy 之后它停留在A1:A3
    • 哇。即使状态和存在听起来像是一个哲学问题,你也完全正确。我可以知道跟踪同一地址的最简单方法吗?
    • @KuanChunYeh 平心而论,这听起来像XY problem,因为移动范围实际上是你大部分时间想要的(事实上,根据我的个人经验,一直都是如此)。如果您确实有正当理由以这种绝对方式跟踪地址,则将地址存储为字符串,并在每次需要时将其解析为范围。
    • 感谢您的技巧。它不会让我将地址存储为字符串并将其解析为一个范围。我所做的是 "dim des as a string des="Sheets(1).Range("A15")" sou.Cut .Range(des)" 你介意告诉我正确的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多