Excel VBA中自动行插入的失败不一致

时间:2017-04-07 19:17:28

标签: excel vba excel-vba

我正在使用Excel工作表来跟踪我的工作申请。

我有两张纸:
1.第一张纸每个应用程序有一行,其最新状态为 2.第二张表,其具有每个应用程序经历的每个“状态”,例如,已完成的应用程序 - >面试预定 - >提供的工作(更有可能完成申请 - >申请被拒绝,但我离题了)。

我所拥有的vb脚本是这样的:
1.每当更改行的状态时,在第一张纸上更新时间戳 2.在第二个工作表中,只要在第一个工作表中更改了行的状态,就在第二个工作表中创建一个新行,其中包括从状态到状态和时间戳。

#1完美无缺。但看似随意(大部分时间我在工作表中间更新一行),当将行插入第二张表时,vba与“结束调试”对话框崩溃

脚本如下:

Dim oval
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
oval = Target.Value
On Error Resume Next
Application.EnableEvents = True
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
old_value = oval
Application.EnableEvents = False
If Target.Column = 5 Then
    Cells(Target.Row, 6) = Now
    Dim firstEmptyRow As Long

    Set rngToSearch = Worksheets("Level 2").Range("A:A")
    'Check first cell isn't empty
    If IsEmpty(rngToSearch.Cells(1, 1)) Then
        firstEmptyRow = rngToSearch.Cells(1, 1).Row
    Else
        Set FirstBlankCell = rngToSearch.FindNext(After:=rngToSearch.Cells(1, 1))
        If Not FirstBlankCell Is Nothing Then
            firstEmptyRow = FirstBlankCell.Row
        Else
            'no empty cell in range searched

        End If
    End If
    Debug.Print firstEmptyRow
    Worksheets("Level 2").Cells(firstEmptyRow, 1) = Worksheets("Level 1").Cells(Target.Row, 1)
    Worksheets("Level 2").Cells(firstEmptyRow, 2) = old_value
    Worksheets("Level 2").Cells(firstEmptyRow, 3) = Worksheets("Level 1").Cells(Target.Row, 5)
    Worksheets("Level 2").Cells(firstEmptyRow, 4) = Now

End If
If Target.Column <> 1 And IsEmpty(Worksheets("Level 1").Cells(Target.Row, 1)) Then
    Dim curr_id As Long
    curr_id = Worksheets("Level 1").Cells(Target.Row - 1, 1)
    If Worksheets("Level 1").Cells(Target.Row - 1) = 1 Then
        curr_id = 1
    End If
    Worksheets("Level 1").Cells(Target.Row, 1) = curr_id + 1
End If
On Error Resume Next

Application.EnableEvents = True
End Sub

我尝试了一些调试,这就是我得到的:
只要vba在行firstEmptyRow

上崩溃,Worksheets("Level 2").Cells(firstEmptyRow, 1) = Worksheets("Level 1").Cells(Target.Row, 1)值就为0

这告诉我,甚至认为搜索的范围是整个A列(在某些时候必须有一个空行,考虑到我到目前为止只有~200行)我还没有做足够的VB编程来弄清楚如何解决这个问题,我希望你们中的一个人可以帮助我。

谢谢!

0 个答案:

没有答案