我有一个启用宏的电子表格,该电子表格可根据我在工作表上选择并触发的某些条件隐藏各种列和行。
首先,我要选择相关的列,方法是用“ Y”标记该列,然后使用以下例程将其余的列用“ N”隐藏:
Sub Hidecolumn()
Dim p As Range
For Each p In Range("H1:BN1").Cells
If p.Value = "N" Then
p.EntireColumn.Hidden = True
End If
Next p
End Sub
请注意,Columns(“ A:G”)将始终可见。根据以上内容,只能隐藏Columns(“ H:BN”)。效果很好。
然后,我将在剩余的Columns(“ H:BN”)可见列中隐藏没有值的各种行,这是59个可能的列。如果该行中的任何列都有值,则该行将保持可见。如果该行的任何可见列中都没有值,那么我将隐藏该行。 59列完全有可能减少到7列。我使用以下例程进行此操作:
Sub HideRowsSecond()
Module2.Unhiderow
Dim srcRng As Range, ws As Worksheet
Set ws = ActiveSheet
Set srcRng = ws.Rows("5:" & ws.Cells(ws.Rows.Count, 4).End(xlUp).Row)
Dim R As Range, hideRng As Range
For Each R In srcRng
If Application.CountA(R.Columns("H:BN").SpecialCells(xlCellTypeVisible)) = 0 Then
If hideRng Is Nothing Then
Set hideRng = R.EntireRow
Else
Set hideRng = Application.Union(hideRng, R.EntireRow)
End If
End If
Next R
If Not hideRng Is Nothing Then hideRng.EntireRow.Hidden = True
MsgBox ("Complete")
End Sub
请注意,起始行是Row(“ 5”),我们将Column(“ D”)用作计数列,因为它在每个数据单元中都有一个值,直到数据集的底部。效果很好。
现在我有了所需的数据集,我需要将此可见数据集保存到一个新的XLSX文件中,用户可以命名该文件并将其保存在他们选择的目录中。目标范围将从“ C3”单元格开始,但是我们需要保存右侧的许多可见列,而数据集的底部则保留许多可见行。
有人可以在最后一步帮助我吗?
答案 0 :(得分:0)
这是解决方案。
Sub exportToFile()
Dim rng As Range
With ActiveSheet
Set rng = Application.Intersect(.UsedRange, .Cells.Resize(.Rows.Count - 2, .Columns.Count - 2).Offset(2, 2))
End With
rng.Select
rng.SpecialCells(xlCellTypeVisible).copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste
Range("A" & Row & ":N" & Row).EntireRow.AutoFit
ActiveSheet.Range("A1").Select
Application.Dialogs(xlDialogSaveAs).Show ("c:\")
End Sub