Функция Excel VBA для вставки только того, что находится в области печати, а не на всем листе?

#excel #vba

#excel #vba

Вопрос:

Я создаю код copy / paste vba для переноса моей финансовой модели в вставленную версию в отдельной модели Excel и не могу понять, как вставить только то, что показано в области печати. В настоящее время она работает просто отлично, но она вставляет все данные за пределы диапазона печати и показывает все данные, которые скрыты в строках / столбцах и не отображаются.

Кажется, я не могу найти функцию или простую функцию для добавления к уже работающему коду, который бы это делал. Я новичок в VBA и не уверен в наилучшем способе добавления этой функциональности.

 Sub Test()

    Dim wb As Workbook, wbPaste As Workbook, wsExhibit1 As Worksheet, wsPaste As Worksheet, wsInputs As Worksheet, _
    wsExhibit2 As Worksheet

    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationAutomatic
        .EnableEvents = False
    End With

    Set wb = ThisWorkbook
    Set wbPaste = Workbooks("Copy_PasteWorkbook.xlsx")
    With wb
        Set wsExhibit1 = .Sheets("Value_Summary")
        Set wsInputs = .Sheets("Inputs")
        Set wsExhibit2 = .Sheets("Calculations")
    End With

    With wbPaste
        Set wsPaste = .Sheets.Add(after:=.Sheets(.Sheets.Count))
    End With

    With wsPaste
        wsExhibitA1.UsedRange.Copy
        .Range("A1").PasteSpecial xlPasteValues
        .Range("A1").PasteSpecial xlPasteFormats
        .Range("A1").PasteSpecial xlPasteColumnWidths
        .Name = .Cells(1, 3)
    End With

    wsInputs.Range("Selected_Calculation").Value = 1
    Do Until wsInputs.Range("Selected_Calculation").Value > wsInputs.Range("Total_Calculations").Value
        Application.Calculate
        With wbPaste
            Set wsTemp = .Sheets.Add(after:=.Sheets(.Sheets.Count))
        End With
        With wsTemp
            wsExhibit2.UsedRange.Copy
            .Range("A1").PasteSpecial xlPasteValues
            .Range("A1").PasteSpecial xlPasteFormats
            .Range("A1").PasteSpecial xlPasteColumnWidths
            .Name = .Cells(1, 3)
        End With
    wsInputs.Range("Selected_Calculation").Value = wsInputs.Range("Selected_Calculation").Value   1
    DoEvents
    Loop
    wsInputs.Range("Selected_Calculation").Value = 1

    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationAutomatic
        .EnableEvents = False
        .CutCopyMode = False
    End With

End Sub
  

Я надеюсь вставить только то, что находится в области печати, установленной в книге, на соответствующие страницы. Не вставлять скрытые данные или данные за пределами диапазона.

Ответ №1:

Print_Area это именованный диапазон.

 Sheets(“SheetName”).Range(“Print_Area”).Copy
  

Чтобы избежать скрытых ячеек:

 Sheets(“SheetName”).Range(“Print_Area”).SpecialCells(xlCellTypeVisible).Copy
  

Комментарии:

1. Тогда, конечно, очень простой ответ. Спасибо за помощь. Есть какие-нибудь советы о том, как игнорировать скрытые строки / столбцы при вставке?