【发布时间】:2015-11-13 22:05:54
【问题描述】:
我有一系列数据,从单元格 C169:N174 运行,获取折线图。单元格数据可以是数字,也可以是空的(Excel 为空) - 公式返回数字或空白文本 ("")。
当通过数据验证触发操作时,我需要将最右侧单元格 (N169:N174) 中的公式从左侧复制到 C169:C174)。为此,我有以下代码:
Range("N169:N174").AutoFill Destination:=Range("C169:N174")
Range("C169:N174").Select
复制公式后,我需要清除任何包含文本 ("") 的单元格。为此,我有以下代码:
Range("C169:M174").SpecialCells(xlCellTypeFormulas, 2).Select
Selection.ClearContents
此代码针对两组数据运行。相同的代码,不同的单元格。范围是 C169:N174 和 C145:N150。我首先为 range1 (C145:N15) 编写了代码 - 复制公式然后删除带有 ("") 的单元格。然后对 range2 (C169:N174) 执行相同的操作。完整代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = "$B$2" Then
'mcroCopyTrendedRentFormulas
Range("N145:N150").AutoFill Destination:=Range("C145:N150"), Type:=xlFillDefault
Range("C145:N150").Select
'mcroClearTrendedRentEmptyCells
Range("C145:N150").SpecialCells(xlCellTypeFormulas, 2).Select
Selection.ClearContents
'mcroCopyAskingRentFormulas
Range("N169:N174").AutoFill Destination:=Range("C169:M174")
Range("C169:N174").Select
'mcroClearAskingRentEmptyCells
Range("C169:M174").SpecialCells(xlCellTypeFormulas, 2).Select
Selection.ClearContents
Range("A1").Select
End If
End Sub
一旦代码被触发,如果我在它完成运行之前单击工作表上的任意位置(我刚刚计时并且花了 45 秒),我会收到一条错误消息:
“1004 错误:未找到单元格”
或
“1004 错误:Range 类的 AutoFill 方法失败”。
如果我让代码运行整个 45 秒,它就可以工作。如果我单击工作表中的任意位置并收到任一错误,请停止调试器并尝试再次运行它,我会收到两个错误之一。
所以也许加快执行速度是问题所在?
我不知道 - 这里对任何事情都开放。
【问题讨论】:
-
剩下的我会继续看,但真的很急,你应该在
Worksheet_Change的末尾打开 ScreenUpdating,或者将它移到If语句中。正如您现在拥有的那样,只要工作表发生更改,它就会关闭,并且永远不会重新打开。 (PS:很好地问了第一个问题!) -
代码运行时为什么要
click anywhere?为什么不让它运行呢? -
尝试在代码开头将
Application.EnableEvents设置为False,然后在最后将其设置为True。