2015-05-21 38 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

相关问题