【问题标题】:Macro copy that includes hidden/filtered data包含隐藏/过滤数据的宏副本
【发布时间】:2021-07-03 02:38:26
【问题描述】:

我有一个包含 20 多个工作表的工作簿,所有工作表的格式相同,第 1 行和第 2 行具有相同的标题。我有一个宏,我拼凑在一起将所有数据(调用的一些工作表除外)拉到一个主文件中在同一个工作簿中。效果很好,但是,不同的用户“拥有”每个选项卡,当他们决定过滤或隐藏工作表中的列并将其保留时,隐藏/过滤的数据无法正确拉到主控。

关于如何从每个工作表到组合工作表的过滤器/隐藏如何从第 3 行获取所有数据的任何建议?如果它只是将工作表中的每个单元格复制到主单元格,我什至可以生存,因为循环中的下一个工作表会在最后占用的行处过去,我可以很容易地过滤重复的标题。

在最坏的情况下,我可以在运行之前添加代码以取消过滤并取消隐藏所有内容,但他们希望回到他们的选项卡并使用过滤器以方便叹息。我永远不知道他们在过滤/隐藏什么,所以我不确定我该如何做到这一点然后巧妙地把它放回去。

在此先感谢

LastOccupiedRowNum/LastOccupiedColNum 函数在别处定义

Public Sub CombineDataFromAllSheets()

Application.ScreenUpdating = False

Dim wksSrc As Worksheet, wksDst As Worksheet
Dim rngSrc As Range, rngDst As Range
Dim lngLastCol As Long, lngSrcLastRow As Long, lngDstLastRow As Long

'Notes: "Src" is short for "Source", "Dst" is short for "Destination"

'Clean old data first
Sheets("Data DO NOT EDIT").Select
Rows("3:2000").Select
Selection.Delete Shift:=xlUp

'Set references
Set wksDst = ThisWorkbook.Worksheets("Data DO NOT EDIT")
lngDstLastRow = LastOccupiedRowNum(wksDst)
lngLastCol = LastOccupiedColNum(wksDst)

'Set the initial destination range
Set rngDst = wksDst.Cells(lngDstLastRow + 1, 1)

'Loop through all sheets
For Each wksSrc In ThisWorkbook.Worksheets

    'Skip these
    If wksSrc.Name <> "Acronyms" And _
        wksSrc.Name <> "Template" And _
        wksSrc.Name <> "Permitter" And _
        wksSrc.Name <> "Plans" And _
        wksSrc.Name <> "Summary DO NOT EDIT" Then
        
        'Identify last occupied row
        lngSrcLastRow = LastOccupiedRowNum(wksSrc)
        
        'Store data then copy it to destination
        With wksSrc
            Set rngSrc = .Range(.Cells(3, 1), .Cells(lngSrcLastRow, lngLastCol))
            rngSrc.Copy Destination:=rngDst
        End With
        
        'Redefine destination range to next empty row
        lngDstLastRow = LastOccupiedRowNum(wksDst)
        Set rngDst = wksDst.Cells(lngDstLastRow + 1, 1)
        
    End If

Next wksSrc

Application.ScreenUpdating = True

结束子

【问题讨论】:

    标签: excel vba filter copy hidden


    【解决方案1】:

    我假设您的数据不是表格,请尝试在 For 循环中添加它

    wksSrc.Rows.EntireRow.Hidden = False
    wksSrc.Columns.EntireColumn.Hidden = False
    On Error Resume Next
        wksSrc.ShowAllData
      On Error GoTo 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 2018-03-31
      • 2018-03-29
      • 2018-12-09
      • 2019-03-30
      • 1970-01-01
      相关资源
      最近更新 更多