如何仅将可见的列和行打印/保存到VBA中的XLSX文件?

时间:2019-05-01 21:37:40

标签: excel vba

我有一个启用宏的电子表格,该电子表格可根据我在工作表上选择并触发的某些条件隐藏各种列和行。

首先,我要选择相关的列,方法是用“ 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”单元格开始,但是我们需要保存右侧的许多可见列,而数据集的底部则保留许多可见行。

有人可以在最后一步帮助我吗?

1 个答案:

答案 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
相关问题