我正在使用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编程来弄清楚如何解决这个问题,我希望你们中的一个人可以帮助我。
谢谢!