Excel 包含隐藏/筛选数据的宏副本
我的工作簿有20多张格式相同的工作表,第一行和第二行都有相同的标题。我拼凑了一个宏,将所有数据(除了调用的几个工作表)拉到同一工作簿中的一个主控集中。工作很好,但是,不同的用户“拥有”每个选项卡,当他们决定在他们的工作表中过滤或隐藏列并将隐藏/过滤的数据留给他们时,不会正确地拉到主选项卡 对于如何从第3行向下获取所有数据,而不考虑从每个工作表到组合工作表的筛选/隐藏,有何建议?如果它只是将工作表中的每个单元格复制到主工作表中,我甚至可以存活下来,因为循环中的下一个工作表将在最后一个占用的行中通过,我可以很容易地过滤重复的标题 最糟糕的情况是,我可以在运行之前将代码添加到unfilter并取消隐藏所有内容,但为了方便起见,他们希望在过滤器就位后返回选项卡。我永远不知道他们过滤/隐藏的目的是什么,所以我不知道如何才能做到这一点,然后巧妙地将其放回原处 非常感谢 LastOccupiedColNum/LastOccupiedColNum函数在别处定义Excel 包含隐藏/筛选数据的宏副本,excel,vba,filter,copy,hidden,Excel,Vba,Filter,Copy,Hidden,我的工作簿有20多张格式相同的工作表,第一行和第二行都有相同的标题。我拼凑了一个宏,将所有数据(除了调用的几个工作表)拉到同一工作簿中的一个主控集中。工作很好,但是,不同的用户“拥有”每个选项卡,当他们决定在他们的工作表中过滤或隐藏列并将隐藏/过滤的数据留给他们时,不会正确地拉到主选项卡 对于如何从第3行向下获取所有数据,而不考虑从每个工作表到组合工作表的筛选/隐藏,有何建议?如果它只是将工作表中的每个单元格复制到主工作表中,我甚至可以存活下来,因为循环中的下一个工作表将在最后一个占用的行中通过
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