Как распечатать / сохранить только видимые столбцы и строки в файл XLSX в VBA? - PullRequest
0 голосов
/ 02 мая 2019

У меня есть электронная таблица с поддержкой макросов, которая позволяет мне скрывать различные столбцы и строки на основе определенных критериев, которые я выбираю и запускаю на листе.

Сначала я выбираю соответствующие столбцы, помечая этот столбец буквой «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

Обратите внимание, что столбцы («A: G») всегда будут видны. Только столбцы ("H: BN") могут быть скрыты на основании вышеизложенного. Это отлично работает.

Затем я скрою различные строки, которые не имеют значения в оставшихся видимых столбцах для столбцов («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

Обратите внимание, что начальная строка - это строка («5»), и мы используем столбец («D») в качестве столбца подсчета, потому что он имеет значение в каждой ячейке вплоть до нижней части набора данных. Это прекрасно работает.

Теперь, когда у меня есть желаемый набор данных, мне нужно сохранить этот видимый набор данных в новый файл XLSX, который пользователь может назвать себе и сохранить в каталоге по своему выбору. Целевой диапазон начинается с ячейки «C3», и нам нужно сохранить столько видимых столбцов, которые расположены справа, и столько видимых строк, которые находятся внизу набора данных.

Может кто-нибудь помочь мне с этим последним шагом?

1 Ответ

0 голосов
/ 10 мая 2019

Вот решение.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...