2015-05-21 36 views
1

Excel 2003中(對他人未測試)爲什麼清理vba中的excel單元格無法正常工作?

Private Sub Worksheet_Change(ByVal Target As Range) 
    For Each cell In Target 
     If Not Intersect(cell, Range("A2:A100")) Is Nothing Then 
      cell.ClearContents 
      cell.Offset(0, 1).Value = CInt(cell.Offset(0, 1).Value) + 1 
     End If 
    Next cell 
End Sub 

如果刪除字符串

cell.ClearContents 

它的做工精細,下一個兄弟細胞的增量,

但幾個它的下一個同級細胞值增加百

爲什麼?

如何正確地完成這項工作?

+7

嘗試'application.EnableEvents = FALSE'第一件事你輸入'Worksheet_Change''Sub',否則每次你從'Worksheet_Change'中的動作改變表單時,它都會被遞歸地調用。在子程序結束時(最好還使用錯誤處理程序)恢復'Application.EnableEvents = True'。 [This](http://www.cpearson.com/excel/Events.aspx)可能會有所幫助。 – Ioannis

+1

沒有'cell.ClearContents','工作',因爲即使* Worksheet_Change *再次被調用並且在其本身之上運行,第二次* Target *在B列中,並且它不符合你的'Intersect'。仍然是錯誤的,但它確實運行。不建議。按照上面的建議切換'application.EnableEvents'。 – Jeeped

+1

如果你完全符合你的'Range(「A2:A100」)',請參閱第3點[這裏](http://stackoverflow.com/a/30363620/2707864)(僅作爲無數次的例子)這顯示出來)。除非你明確不想,在這種情況下你最好實現[this](http://stackoverflow.com/a/27838913/2707864)。 –

回答

1

添加顯式的選項,以保護其未聲明的變量您的VBA和消除編譯錯誤

的可能性試試這個辦法應該工作

Option Explicit 
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim cell As Variant 
    For Each cell In Target 
     If Not Intersect(cell, Range("A2:A100")) Is Nothing Then 
      cell.ClearContents 
      cell.Offset(0, 1).Value = CInt(cell.Offset(0, 1).Value) + 1 
     End If 
    Next cell 
End Sub 
+0

感謝您的澄清,但您的版本也給出了與我相同的結果,單元格值增加了幾百,而不是一個 – jah

相關問題