Excel 包含隐藏/筛选数据的宏副本

Excel 包含隐藏/筛选数据的宏副本,excel,vba,filter,copy,hidden,Excel,Vba,Filter,Copy,Hidden,我的工作簿有20多张格式相同的工作表,第一行和第二行都有相同的标题。我拼凑了一个宏,将所有数据(除了调用的几个工作表)拉到同一工作簿中的一个主控集中。工作很好,但是,不同的用户“拥有”每个选项卡,当他们决定在他们的工作表中过滤或隐藏列并将隐藏/过滤的数据留给他们时,不会正确地拉到主选项卡 对于如何从第3行向下获取所有数据,而不考虑从每个工作表到组合工作表的筛选/隐藏,有何建议?如果它只是将工作表中的每个单元格复制到主工作表中,我甚至可以存活下来,因为循环中的下一个工作表将在最后一个占用的行中通过

我的工作簿有20多张格式相同的工作表,第一行和第二行都有相同的标题。我拼凑了一个宏,将所有数据(除了调用的几个工作表)拉到同一工作簿中的一个主控集中。工作很好,但是,不同的用户“拥有”每个选项卡,当他们决定在他们的工作表中过滤或隐藏列并将隐藏/过滤的数据留给他们时,不会正确地拉到主选项卡

对于如何从第3行向下获取所有数据,而不考虑从每个工作表到组合工作表的筛选/隐藏,有何建议?如果它只是将工作表中的每个单元格复制到主工作表中,我甚至可以存活下来,因为循环中的下一个工作表将在最后一个占用的行中通过,我可以很容易地过滤重复的标题

最糟糕的情况是,我可以在运行之前将代码添加到unfilter并取消隐藏所有内容,但为了方便起见,他们希望在过滤器就位后返回选项卡。我永远不知道他们过滤/隐藏的目的是什么,所以我不知道如何才能做到这一点,然后巧妙地将其放回原处

非常感谢

LastOccupiedColNum/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
公共子组合数据来自所有表单()
Application.ScreenUpdating=False
将WKSRC标注为工作表,WKSST标注为工作表
变暗rngSrc As范围,rngDst As范围
暗淡的lngLastCol为长,LNGSRCSTASTROW为长,LNGDSTASTROW为长
注释:“Src”是“源”的缩写,“Dst”是“目的”的缩写
“先清理旧数据
工作表(“数据不编辑”)。选择
行(“3:2000”)。选择
选择。删除移位:=xlUp
'设置引用
设置wksDst=ThisWorkbook.Worksheets(“数据不可编辑”)
LNGDSTSTASTROW=最近发生的事件(wksDst)
lngLastCol=最近占用的Lnum(wksDst)
'设置初始目标范围
设置rngDst=wksDst.Cells(LNGDSTSTSTASTROW+1,1)
"翻遍所有纸张,
对于此工作簿中的每个WKSRC。工作表
“跳过这些
如果WKSRC.名称为“首字母缩写”和_
WKSRC.名称“模板”和_
WKSRC.名称“许可人”和_
WKSRC.名称“计划”和_
WKSRC.Name“汇总不编辑”然后
'识别最后占用的行
LNGSRCASTROW=Lastoccupiedochum(WKSRC)
'存储数据,然后将其复制到目标
与WKSRC合作
设置rngSrc=.Range(.Cells(3,1),.Cells(LNGSRCASTROW,lngLastCol))
rngSrc.Copy Destination:=rngDst
以
'将目标范围重新定义为下一个空行
LNGDSTSTASTROW=最近发生的事件(wksDst)
设置rngDst=wksDst.Cells(LNGDSTSTSTASTROW+1,1)
如果结束
下一届西九龙文娱艺术中心
Application.ScreenUpdating=True

End Sub

我假设您的数据不是一个表,请尝试将其添加到For循环中

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