【发布时间】: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