我对Excel VBA还是陌生的,用于自动执行任务。我经常创建一个新工作表,其他人可以访问它进行更改。我一直在制作一个“日志”表,它使我可以查看所做的更改。包含数据的工作表有6列,其中两列有一个下拉菜单,一个有任何注释。在某些情况下,两个列都会更改,但在其他情况下,一个或另一个会更改。
我的代码应该能够使用:
跟踪更改 Private Sub Workbook_Change(ByVal Sh As Object, ByVal Target As Range)
我可以使用以下代码找到这些更改:
Dim Ref1() As String
Dim Ref2() As String
Dim i As Integer
Dim Change1 As String
Dim oldRef1 As String
Dim newRef1 As String
Dim Change2 As String
Dim oldRef2 As String
Dim newRef2 As String
`Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)`
'Finding change in first drop down menu
If ActiveSheet.name <> "Log" Then
If Not Intersect(Target, Range("B2:B30000")) Is Nothing Then
Application.EnableEvents = False
Ref1(i) = Target.Row
newRef1(i) = Target.Value
Application.Undo
oldRef1(i) = Target.Value
Application.Undo
Change1(i) = oldRef1(i) & " to " & newRef1(i)
End If
'Finding change in second drop down menu
If Not Intersect(Target, Range("C2:C30000")) Is Nothing Then
Application.EnableEvents = False
Ref2(i) = Target.Row
newRef2(i) = Target.Value
Application.Undo
oldRef2(i) = Target.Value
Application.Undo
Change2(i) = oldRef2(i) & " to " & newRef2(i)
End If
'Finding the comment written
If Not Intersect(Target, Range("F2:F30000")) Is Nothing Then
Application.EnableEvents = False
Ref3(i) = Target.Row
Comment(i) = Target.Value
End If
我不确定在这种情况下如何实现i的使用,以将其分配给工作簿更改事件,因为我假设使用For i = 1 To XXX将循环我的代码。
与此同时,我还想执行一个If语句,以说如果Ref1(i)= Ref2(i)= Ref3(i),则Change1(i),Change2(i),Change3(i)应该出现在同一行,否则如果Ref1(i)/ Ref2(i)= Ref3(i),则应出现在同一行。
我想使用i表单只是因为通常会在第一列中对许多行进行更改,然后在第二列中进行更改-这将创建一个很长的列表和注释只会出现在第一列已更改的框中,而不会出现在第二列。
任何想法如何/是否有可能实现这一目标?