仅在changeevent中运行代码时出现运行时错误

时间:2015-03-27 22:22:41

标签: excel vba count range runtime-error

所以我将数据从工作簿导入到另一个工作簿。在将接收数据的工作簿中,我有一个宏(见下文)应该计算总行数(来自B13:lastrow)并添加注释。

我得到运行时错误-2147417848(80010108) 自动化错误
调用的对象已与其客户端断开连接。

当我使用Application.EnableEvents = False时,我没有得到这些错误,但是,宏也不会工作。 我想这与我正在使用的ActiveSheet有关吗?

Sub FindTotalAmountOfRowsInColumn()
Dim startCol As String
Dim startRow As Long
Dim lastrow As Long
Dim lastCol As Long
Dim myCol As String
Dim ws, ws2 As Worksheet
Dim Rng As Range
Dim cell As Range

Application.ScreenUpdating = False
Set ws2 = ActiveSheet 'Preserves a reference to the active sheet as ws2
ThisWorkbook.Activate 'Makes this workbook the one that is displayed

Set ws = ThisWorkbook.Sheets("Sheet1")

With ws
startCol = "B"
startRow = 13
lastrow = ws.Range(startCol & ws.Rows.count).End(xlUp).Row
'lastCol = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column
lastCol = ws2.UsedRange.Columns(ws2.UsedRange.Columns.count).Column


myCol = GetColumnLetter(lastCol)


Set Rng = ws.Range(startCol & startRow & ":" & myCol & lastrow)


ws.Range("A8").Value = "ITEMCOUNT:" & Rng.Rows.count

End With
Application.ScreenUpdating = True
End Sub

1 个答案:

答案 0 :(得分:0)

您已通过更改A8的值创建了无限循环,从而重新触发了Sheet1的Worksheet_Change事件。 Application.DisableEvents = False是解决此问题的常用方法,适用于大多数情况。 (更复杂的情况可能会使用其他内容,例如布尔触发器)。基于你说不再发生任何事情的事实,我只能假设你从未使用Application.DisableEvents = True重新启用事件。我在本地进行了测试以验证并实现了我所描述的效果。运行以下宏以重新启用事件(如果它们仍被禁用):

Sub enabEvents()
    Application.EnableEvents = True
End Sub

然后确保在方法开头禁用事件,并在方法结束时重新启用事件。

Application.EnableEvents = False
//
// Your method code
//
Application.EnableEvents = True