Печать таблицы без полей из Excel с помощью метода .ExportAsFixedFormat vba? - PullRequest
0 голосов
/ 21 декабря 2018

Я использую следующую процедуру, чтобы экспортировать (сохранить) диаграмму в формате PDF.Функция получает имена выбранных пользователем диаграмм в коллекции.Затем он экспортирует один за другим в формате PDF, где пользователь может выбрать папку сохранения экспортированного PDF.Вот мой код.

Private Function ExportCurvesPDF(Curves As Collection)
Dim source As Workbook
Dim i As Integer
Dim FileName As String
Dim ExportPath As String

Set source = Thisworkbook

ExportPath = "V:\"
For i = 1 To Curves.count
    FileName = Application.GetSaveAsFilename(ExportPath & Curves(i) & ".pdf")

    If FileName <> "False" Then
       source.Sheets(Curves(i)).ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
    End If

    ExportPath = common_DB.FolderFromPath(FileName)
Next i

End Function

Код работает, как ожидалось, и печатает PDF-файлы в качестве примера ниже:

This is how it looks in PDF

PDF имеет вполне достаточный запас, и я хочу уменьшить или удалить его.Я попытался изменить свойство IgnorePrintArea и свойство IncludeDocProperties, но, похоже, ничто не влияет на маржу.

Есть ли способ уменьшить маржу с помощью .ExportAsFixedFileFormat?

РЕДАКТИРОВАТЬ: меня попросили предоставить скриншот того, как диаграмма выглядит в Excel:

This is how it looks in excel

Ответы [ 3 ]

0 голосов
/ 07 марта 2019

Может быть, я не смог ясно понять вопрос.Если вы хотите только уменьшить маржу, то для вопроса о вознаграждении это кажется слишком простым (просто уменьшите маржу до 0 или введите PageSetup).результат может быть таким enter image description here

 With source.Sheets(Curves(i)).PageSetup
.LeftMargin = Application.InchesToPoints(0)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
 End With

source.Sheets(Curves(i)).ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
0 голосов
/ 08 марта 2019

Код ниже работал для меня.Я оставил несколько комментариев, которые могут быть полезны для вас.Я не уверен, что ch.Activate необходимо.Я ожидаю, что это не так, но я не проверил это полностью.

Изображение, которое я получил, также ниже.Я не знаю, является ли это слишком большим запасом для вас, но он, кажется, имеет меньше белого поля, чем ваш случай.

enter image description here

' Sub only for testing
Private Sub ExportCurvesPDF_caller()
    Dim chsheets As Sheets
    Set chsheets = Charts
    Call ExportCurvesPDF(chsheets)
End Sub

' The Subs you need
Private Sub ExportCurvesPDF(Curves As Sheets)        
    Dim ExportPath As String
    ExportPath = "C:\Users\user1\Documents\"

    Dim ch As Chart
    For Each ch In Curves
        Dim FileName As String
        FileName = ExportPath & ch.Name
        ch.Activate
        Call set_margins(ch)
        ch.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
    Next ch        
End Sub

Private Sub set_margins(ch As Chart)
    Application.PrintCommunication = False
    With ch.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0)
        .RightMargin = Application.InchesToPoints(0)
        .TopMargin = Application.InchesToPoints(0)
        .BottomMargin = Application.InchesToPoints(0)
        .HeaderMargin = Application.InchesToPoints(0)
        .FooterMargin = Application.InchesToPoints(0)
        '.ChartSize = xlScreenSize
        '.PrintQuality = 600
        .CenterHorizontally = False
        .CenterVertically = False
        '.Orientation = xlLandscape
        .Draft = False
        .OddAndEvenPagesHeaderFooter = False
        '.DifferentFirstPageHeaderFooter = False
        '.EvenPage.LeftHeader.Text = ""
        '.EvenPage.CenterHeader.Text = ""
        '.EvenPage.RightHeader.Text = ""
        '.EvenPage.LeftFooter.Text = ""
        '.EvenPage.CenterFooter.Text = ""
        '.EvenPage.RightFooter.Text = ""
        '.FirstPage.LeftHeader.Text = ""
        '.FirstPage.CenterHeader.Text = ""
        '.FirstPage.RightHeader.Text = ""
        '.FirstPage.LeftFooter.Text = ""
        '.FirstPage.CenterFooter.Text = ""
        '.FirstPage.RightFooter.Text = ""
        .PaperSize = xlPaperA4
        '.FirstPageNumber = xlAutomatic
        '.BlackAndWhite = False
        '.Zoom = 100
    End With
    Application.PrintCommunication = True
End Sub
0 голосов
/ 06 марта 2019

Вы можете попытаться указать немного больше области для экспорта.Это будет работать, если содержание .pdf было уменьшено.Например, предположим, что ваш график выровнен по ячейкам от A1 до H30.Вы можете экспортировать:

source.Sheets(Curves(i)).Range("A1:H30").ExportAsFixedFormat Type:=xlTypePDF...

Помните, что вы можете перечислить свои диапазоны, чтобы вписать это в свой собственный код.

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

...