2013-02-13 94 views
0

当执行以下VB代码和“跟踪修改”功能开启我在MS Excel遇到错误:VB Excel中错误

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 1 Then 
     If IsEmpty(Target) Then 
      Target.Offset(0, 1).Value = Empty 
     Else 
      Target.Offset(0, 5).Value = Now() 
     End If 

    End If 

End Sub 

看来,我可以将数据输入到第一2行很好,但一旦我开始填充第三行和之后的数据,我得到一个错误,指出“运行时错误”1004'应用程序定义或对象定义的错误“。

+0

这是在vb.net或在Excel的VBA编辑器中(例如'Developer Tab - > Visual Basic')?你可以在编辑器中添加一个断点来辨别这个错误在代码中被抛出的位置吗? – Sam 2013-02-13 17:11:51

+0

这在Excel 2010中适用于我。请注意,在Excel 2010(可能是2007)中跟踪更改为ON时,您可能无法在共享工作簿文件中使用宏。 – 2013-02-13 18:03:52

+0

另请注意,您可能希望在此代码的开头使用'Application.EnableEvents = False',并在此代码的末尾使用'Application.EnableEvents = True'来防止不必要的循环(if/else语句ALSO会触发_Change事件并且第二次触发宏,这是不必要的)。 – 2013-02-13 18:16:46

回答

0

变更跟踪强制工作簿变为共享,这将禁用许多功能(例如,您无法通过启用更改跟踪访问VBA)。

我不能完全肯定为什么被抛出这个错误,但有解决方法,以避免看到此消息将Resume Next时出现错误:

On Error Resume Next

只需添加这行关于您的第一个If区块的代码(If Target.Column = 1 Then)。请注意,理想情况下,您应该想要辨别此问题的来源,并且此解决方案是一种解决方法,这可能不是一种好的做法。

0

我得到从第2行开始的错误,并使用此代码打开跟踪更改。代码似乎做它应该做的事情,无论错误,所以我会建议一个On Error Resume Next解决。

这并没有解决更改跟踪的任何潜在问题,您的更改可能未被跟踪。