每当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")
注意:"Calculator"是工作表的正确名称
1条答案
按热度按时间bttbmeg01#
我无法重现您的错误,我可以猜测它与C15中的"IF"公式有关
但我给你点建议
1.不必要的
Set
和If Not...
检查设置
Xrg
,然后检查同一范围是否为Nothing
是无用的,因为它永远不会是Nothing
所以你可以直接去
1.清除剪贴板
在
Copy
方法之后使用Range
对象的PasteSpecial
方法,将使剪贴板被后者的结果占据(正如您所看到的,复制的单元格保持高亮显示),这可能会影响以下操作那么好习惯是使用以下命令释放剪贴板:
因此:
1.由于您只对复制/粘贴值感兴趣,因此使用
Range
对象的Value
属性再详细说明一下:
每次C15中的值改变时,我想将C15的值复制到D15。
我的理解是您不能使用
Worksheet_Change()
事件,因为C15更改值时不会将其作为计算结果触发为了仅在C15更改其值 * 时将C15值复制到D15 *,您可以使用
Static
变量,该变量在后续宏运行中保存其值:如果工作表计算也可以由不影响C15的单元格触发,并且计算非常耗时,则此选项非常有用
而如果工作表计算总是影响单元格C15的值,则可以坚持使用前面的代码