工作表更改事件与数组

时间:2019-01-17 15:42:54

标签: excel vba

我对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表单只是因为通常会在第一列中对许多行进行更改,然后在第二列中进行更改-这将创建一个很长的列表和注释只会出现在第一列已更改的框中,而不会出现在第二列。

任何想法如何/是否有可能实现这一目标?

0 个答案:

没有答案