Excel VBA - 检查宏使用的任何单元格是否已更新,如果是,则重新运行宏。保持格式化

时间:2017-04-14 20:26:30

标签: excel vba excel-vba ms-office

我有一个Excel工作簿,其中包含工作表中的销售线索列表,按字母表分隔(工作表'A'包含所有以'A'开头的线索)。我在一个单独的工作表上运行以下宏,将所有这些工作表合并为一个主工作表(代码找到here)。

目标:当我更改工作表中的单元格(比如工作表A)时,我希望在运行我的宏的主工作表上进行更新。我假设只要其中一个单元格被更改,我就需要重新运行宏。有没有办法自动检测宏使用的任何数据的变化,然后触发它重新运行?

我已经找到了如何对一系列细胞或特定细胞进行此解决方案的解决方案,但不是一系列工作表中的每个细胞。

Sub CopyRangeFromMultiWorksheets()
Dim sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
Dim CopyRng As Range

With Application
    .ScreenUpdating = False
    .EnableEvents = False
End With

'Delete the sheet "RDBMergeSheet" if it exist
Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Worksheets("RDBMergeSheet").Delete
On Error GoTo 0
Application.DisplayAlerts = True

'Add a worksheet with the name "RDBMergeSheet"
Set DestSh = ActiveWorkbook.Worksheets.Add
DestSh.Name = "RDBMergeSheet"

'loop through all worksheets and copy the data to the DestSh
For Each sh In ActiveWorkbook.Worksheets
    If sh.Name <> DestSh.Name Then

        'Find the last row with data on the DestSh
        Last = LastRow(DestSh)

        'Fill in the range that you want to copy
        Set CopyRng = sh.UsedRange

        'Test if there enough rows in the DestSh to copy all the data
        If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then
            MsgBox "There are not enough rows in the Destsh"
            GoTo ExitTheSub
        End If

        'This example copies values/formats, if you only want to copy the
        'values or want to copy everything look at the example below this macro
        CopyRng.Copy
        With DestSh.Cells(Last + 1, "A")
            .PasteSpecial xlPasteValues
            .PasteSpecial xlPasteFormats
            Application.CutCopyMode = False
        End With

        'Optional: This will copy the sheet name in the H column
        DestSh.Cells(Last + 1, "M").Resize(CopyRng.Rows.Count).Value = sh.Name

    End If
Next

ExitTheSub:

Application.Goto DestSh.Cells(1)

'AutoFit the column width in the DestSh sheet
DestSh.Columns.AutoFit

With Application
    .ScreenUpdating = True
    .EnableEvents = True
End With
End Sub

如果它保持格式化会很棒。每次重新运行宏时,单元格都会调整大小。

0 个答案:

没有答案