每次C15中的值更改时,我都要将C15的值复制到D15。单元格C15有一个基于同一工作表中另一个单元格的简单“if函数”。每当我尝试使用我的代码时,它最初都能工作(值被复制到单元格D15)。然而,一秒钟后,我得到了这个错误:
VBA运行时错误“-2147417848(80010108)”:对象“Worksheet”的方法“Range”失败。
下面是我的代码:
Private Sub Worksheet_Calculate()
Dim Xrg As Range
Set Xrg = Sheets("Calculator").Range("C15")
If Not Intersect(Xrg, Sheets("Calculator").Range("C15")) Is Nothing Then
Range("C15").Copy
Range("D15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End If
End Sub
字符串
如果我调试它告诉我错误在这里:
Set Xrg = Sheets("Calculator").Range("C15")
型
注意:“计算器”是工作表的正确名称
1条答案
按热度按时间6mzjoqzu1#
我不能重现你的错误,我猜它与C15中的“IF”公式有关
但让我给予你一些建议
1.不必要的
Set
和If Not...
检查设置
Xrg
,然后检查该范围是否不是Nothing
是无用的,因为它永远不会是Nothing
所以你可以直接去
字符串
1.清除剪贴板
如果在
Range
对象的Copy
对象之后使用PasteSpecial
对象的PasteSpecial
方法,则剪贴板将被后一个方法的结果占用(正如您所看到的,复制的单元格保持突出显示),这可能会影响以下操作它的好习惯,然后释放剪贴板使用:
型
因此:
型
1.由于您只对复制/粘贴值感兴趣,因此使用
Range
对象的Value
属性型
编辑
详细说明一下:
每次C15中的值更改时,我都要将C15的值复制到D15。
我的理解是你不能使用
Worksheet_Change()
事件,因为它不会被C15改变值作为计算结果而触发为了让C15的值仅在C15更改其值 * 时复制到D15 *,您可以使用
Static
变量,该变量在后续宏运行中保持其值:型
如果工作表计算也可以由不影响C15的单元格触发,并且计算应该是耗时的,则此功能非常有用
而如果您的工作表计算总是影响单元格C15的值,那么您可以坚持使用前面的代码