RunTime错误和Cells()属性在Workbook_SheetChange内失败

我试图写一个简单的跟踪程序,但不能教它正确地逐行填写报告。

这个想法是:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 'define last row in report <proper code for it> 'fill in "last row +1" with tracking info <proper code for it as well> End Sub 

所以我试了两个select:

1)与Cells()属性(而不是Offset可能只是LastRow + 1行索引)

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) LastRow = ThisWorkbook.Sheets(1).Cells(ThisWorkbook.Sheets(1).Rows.Count, 1).End(xlUp).Row ThisWorkbook.Sheets(1).Cells(LastRow, 1).Offset(1, 0).Value = 1 End Sub 

它会导致多行填充所需的值。 奇怪的是,在工作表中每次更改之后,总是会在选定的单元格中向下select93行(93 186 279 372 465 558)。

2)使用Range()属性:

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) LastRow = ThisWorkbook.Sheets(1).Cells(ThisWorkbook.Sheets(1).Rows.Count, 1).End(xlUp).Row ThisWorkbook.Sheets(1).Range("A1").Offset(LastRow, 1).Value = 1 End Sub 

然后它正确地填充所需的单元格,但是不断地结果

运行时错误“-2147417848(80010108):对象_工作表的方法范围失败

并在三次之一,也使Excel崩溃。

您的代码会触发SheetChange事件,因为代码将写入表单,以便代码创build循环。 尝试closures事件,然后再打开。

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Application.EnableEvents = False LastRow = ThisWorkbook.Sheets(1).Cells(ThisWorkbook.Sheets(1).Rows.Count, 1).End(xlUp).Row ThisWorkbook.Sheets(1).Cells(LastRow, 1).Offset(1, 0).Value = 1 Application.EnableEvents = True End Sub 

你可能重新触发事件。 禁用事件之前:

 ThisWorkbook.Sheets(1).Cells(LastRow, 1).Offset(1, 0).Value = 1 

并在之后重新启用它们。