更改单元格后自动将行复制到新工作表excel VBA

时间:2018-10-16 22:29:43

标签: excel vba copy

我知道这个问题已被多次发布。但我只是无法正常工作,我尝试了许多方法。

我有code,当在rows中输入特定的sheet时,它会自动将特定的value复制到新的Column B。但这仅在将marco分配给按钮并手动触发时才会发生。复制多个行时,这不是很有效。尤其是当您复制数百行且只有最后几行实际更改时。我希望输入该值后会自动发生。

所以我的first sheet被称为MASTER,而second sheet被称为CON。在Change of Numbers中输入MASTER后,我想将这些rows自动复制到工作表CON中。

下面的此code位于Master Sheet(这是第一个)中。当将值输入script时,此Columns用于隐藏/取消隐藏特定的Column B

主表

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("B:B")) Is Nothing Then
        On Error GoTo safe_exit
        Application.EnableEvents = False
        Dim t As Range
        For Each t In Intersect(Target, Range("B:B"))
            Select Case (t.Value)
                Case "Change of Numbers"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("H:BL").EntireColumn.Hidden = True
                    'do nothing
            End Select
        Next t

    End If

safe_exit:
    Application.EnableEvents = True
End Sub

以下script位于sheet CON(第二张纸)中。该script用于auto-copy的{​​{1}},其中rowsX的{​​{1}}中输入。但是,我必须将此宏分配给此工作表上的按钮。然后,每次触发宏时,它将抓取所有指定的行。

CON SHEET

Column A

但是,如果不手动运行脚本,这仍然行不通。

2 个答案:

答案 0 :(得分:2)

如果您的第一个子项目完全按预期工作,则您需要做的只是Call事件中的子项目。请注意,由于Worksheet_Change宏已设置,因此只有在Worksheet_Change

上进行了更改时,它才会调用
Column A

答案 1 :(得分:2)

您的代码没有监视任何事件的发生。您想要的特定事件是Worksheet_Change()事件,这是我在您提供的第二个代码片段中看到的。

因此,您可以采用以下两种方法。一种是将整个代码复制并粘贴到该事件中,或者两种(通常是首选)是在事件处理程序中调用该子程序。

但是,要让 Worksheet 监视 Change Event ,您需要将其放入工作表的代码模块中。在VBE中,您将看到Sheet1Sheet2

我的建议是,将您的Sub FilterAndCopy()放在标准模块中。然后Sheet1的代码模块中,添加:

Private Sub Worksheet_Change(ByVal Target As Range)

    On Error GoTo ErrHandler

    'Test if criteria is met
    If Intersect(Target, Columns("A")) Is Nothing Then
        Exit Sub
    ElseIf Target.Value = "mySpecificValue" Then
        Application.EnableEvents = False
        FilterAndCopy

        Dim t As Range
        For Each t In Intersect(Target, Range("a:a"))
            Select Case UCase(t.Value)
                Case "X"
                    Columns("B:C").EntireColumn.Hidden = True
                    Columns("D:E").EntireColumn.Hidden = False
                Case "Y"
                    Columns("B:C").EntireColumn.Hidden = False
                    Columns("D:E").EntireColumn.Hidden = True
                Case Else
                    'do nothing
            End Select
        Next t

    End If

ErrHandler:

    If Err.Number <> 0 Then
        Rem: Optional - Error message and/or err recovery
    End If

    Application.EnableEvents = True

End Sub