更新活动无效

时间:2018-04-30 21:25:31

标签: excel vba excel-vba

我会尽可能直接制作这个。 三张工作单在玩。备注,收集和延迟报告。随着Notes工作表的更新,它会查找延迟的航班并自动将它们加载到shGather工作表。这个功能工作得很好。我的问题是关于shGather工作表的更新事件。

我在shGather工作表上有以下代码。目的是在工作表更新时运行数组。如果合适,shGather上的信息会填充延迟报告。

Sub wsGather_Change(ByVal Target As Range)

Dim wsg As Worksheet
Dim wsd As Worksheet
Dim a As Long  'Total Array
'Dim b As Long
Dim i As Long  'Rows
Dim j As Long  'Columns
Dim lr As Long  'lr is shorthand for last row in the count
Dim cr As Long  'cr is shorthand for current row
Dim cc As Long  'cc is shorthand for current column
Dim arval As String  'array values
Dim aval As Variant  'A column on the shGather worksheet.  This value will determine if the information is added to the array
Dim array1()

If Not Intersect(Target, wsg.Range("A2:A15")) Is Nothing Then

Set wsg = Worksheets("Gather")  'Add data from this worksheet to the array
Set wsd = Worksheets("Delay Report") 'deposit information from the array to this worksheet

lr = wsg.Cells(Rows.Count, "A").End(xlUp).Row

arval = "" 'This will be the total strig value of the individual array values that are captured
a = 0  'counts the total number of rows of data that exist in the array

    For i = 2 To lr  'Start the array
        aval = wsg.Range("A" & i).Value

        If aval = "Y" Then  'Set the search parameters
            arval = wsg.Range("B" & i).Value & "~#pop#~"  'Start collecting data with the B column

                For j = 7 To 14
                    arval = arval & wsg.Cells(i, j).Value & "~#pop#~"   'continue collecting information in the various columns
                Next j
            ReDim Preserve array1(a)
            array1(a) = arval
            a = a + 1
        End If

    Next i

wsd.Range("G2:O15").ClearContents  'Clears the inserts range

If a > 0 Then
    cr = 2
    For i = LBound(array1) To UBound(array1)
        cc = 6
        newarr = Split(array1(i), "`#pop#~")
        For j = LBound(newarr) To UBound(newarr)
            wsd.Cells(cr, cc).Value = newarr(j)
            cc = cc + 1
        Next j
        cr = cr + 1
    Next i
End If

End If

Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.EnableEvents = True





End Sub

我似乎无法弄清楚为什么我没有得到延迟报告的数据输出结果。我甚至不确定代码是否正在触发正确的事件,这是我怀疑的。 shGather表没有来自任何用户的直接输入。它只是收集数据。

我怀疑我有错误的事件,或者我的代码还有其他问题。任何见解都会有所帮助。

我花了很多时间试图理解这一点,我离得更近但仍在学习。至少这次我有代码要显示。

1 个答案:

答案 0 :(得分:2)

请参阅蒂姆的评论,说明为什么不解雇。也就是说,我不相信你的代码会做你想做的事情。例如,你的行If Not Intersect(Target, wsg.Range("A2:A15")) Is Nothing Then将始终不等,因为wsg在被调用时没有被设置为任何东西。

另外,我认为你在填充Gather表的Notes表上有一些workheet_change事件,然后这个事件应该启动并做其他事情?如果是这样,只需将此代码的“执行内容”位移动到另一个事件处理程序...在不同的工作表上有两个事件处理程序响应用户所做的一件事是没有意义的。