2013-02-08 61 views
1

我有一個Worksheet_Change事件,當前在Sheet Module Level。問題是我希望能夠有時清除此表。然而,當我清楚我的表,我得到一個溢出:檢測表單更改,清除表單溢出

Private Sub Worksheet_Change(ByVal Target As Range) 
    'This is the line causing the problem because clearing the whole sheet causes the count to be massive 
    If Target.Count = 1 Then 
     If Target = Range("A4") Then 
      If InStr(LCase(Target.Value), "loaded") <> 0 Then 
       Range("A5").FormulaArray = "=My_Function(R[-1]C)" 
      End If 
     End If 
    End If 
End Sub 

我努力實現以下目標:

我按下一個按鈕,紙張被清除(將清除現有陣列式數據)然後我將一個公式粘貼到表格中並調用公式。該公式將數據返回到Excel緩存並將包含此公式(A4)的單元格更改爲一個字符串,指示「已加載」。當我檢測到一個單元格更改值爲「已加載」時,我在上執行相應操作Ctrl + Shift + 在下面的數組公式中輸入以顯示數據。

回答

0

我相信你正在使用xl2007 +?

Target.Cells.CountLong的值,因此當您選擇整個工作表時,.Count太小而無法保存結果。

更換線

If Target.Count = 1 Then 

If Target.Cells.CountLarge = 1 Then 

您也可能希望看到this,因爲你正在使用Worksheet_Change

編輯

兩個其他的事情

1)

您還可以

If Not Intersect(Target, Range("A4")) Is Nothing Then 

2)

這一行替換該行

If Target = Range("A4") Then 

If InStr(LCase(Target.Value), "loaded") <> 0 Then 

也可以寫成

If InStr(1, Target.Value, "loaded", vbTextCompare) Then