【问题标题】:excel to pdf ignores print area and calls printerexcel到pdf忽略打印区域并调用打印机
【发布时间】:2017-04-03 18:51:25
【问题描述】:

这会遍历学生列表,但在打印区域失败,该区域在导出行中设置和编码 - 它为每个学生打印 130 页,而应该只有一个。所有打印机都被调用,打开一个对话框(登录 6 密码)并停止宏 - 打印机是网络上的工作打印机,并不总是可用。 有没有办法阻止打印机被调用? 并控制页面到打印区域?

Option Explicit

Sub PdfExportMacro()
Dim rCell As Range, rRng As Range

'Student numbers in cells A7:A160
Set rRng = Worksheets("studentlist").Range("A7:A160") '<--| set your "students" range

With Worksheets("Feedback") '<--| reference "Feedback" worksheet
    For Each rCell In rRng '<--| loop through "students" range
    .Range("A1").Value = rCell.Value '<--| write current student number to cell A1 on Feedback sheet

       ' Export & save file as pdf using SNum as filename:
        .ExportAsFixedFormat Type:=xlTypePDF, fileName:= _
        "Macintosh HD:Users:Michael:Desktop:" & rCell.Value, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    Next rCell
End With

End Sub

【问题讨论】:

  • 您那里的代码,它将始终将反馈复制到反馈表中的单元格 A1,然后将其导出为新文件。这意味着您将拥有 130 个 PDF 文件。这是你想要的吗?还有你用什么打印代码?
  • 嗨 Niclas,感谢您查看此内容。复制到单元格 A1 的值是学生列表表中的学生编号 - 该循环工作正常,发生的情况是创建的 pdf - 反馈表中应该只有 1 张(定义的打印区域),而不是 130 页工作表上的数据(这是巨大的,...)。如果我理解正确,唯一的打印代码是导出格式语句。
  • 不确定我是否理解。当前代码将创建 130 个 pdf 文件,而不是 130 页。它将学号复制到反馈表中的A1,然后将其保存为“学号.pdf”。那么根据您想要实现的目标,这是错误的吗?什么是打印区域?
  • 好的,我们的想法是创建 160 个 pdf 文件 - 每个学生一个。该循环工作正常。但是,当它导出为 pdf 时,它实际上会获取所有工作表上的所有数据并创建一个包含 128 页不需要的数据的文件,而不是它应该使用的 1 页反馈(打印区域是 E3:W77 在反馈工作表)。这是反馈表上设置的打印区域 - 没有设置其他打印区域。
  • 当我运行代码时,我会得到每个学生 1 个 pdf,其中学生号作为文件名。所以我不明白你是如何得到你的输出的?打印到A4打印区域会不会有点奇怪?

标签: excel pdf vba


【解决方案1】:

所以我改变了轨道 - excel vba 似乎并不乐意在打印机设置为原样的情况下生成 pdf 文件...... 因此,我更改为使用复制和粘贴特殊值和格式为每个学生导出一个 excel 文件。这是我所做的代码(很多是从这里的其他答案中偷来的!谢谢...)欢迎任何有关改进代码的 cmets - 我认为这有很大的余地!

    Option Explicit

Sub Exportmacro()
    Dim rCell As Range, rRng As Range 'define loop names
    Dim NewCaseFile As Workbook 'give a name to new work book for duplicate sheet
    Dim wks As Worksheet 'name of the copy of feedback
    Dim sPath As String
    sPath = MacScript("(path to desktop folder as string)")
'turn off screen
With Application
'        .ScreenUpdating = False  ‘only removed while testing
'        .EnableEvents = False
'        .Calculation = xlCalculationManual  ‘disabled for the moment
End With

    'Student numbers in cells A7:A160 WARNING SET TO 3 STUDENTS ONLY FOR TEST
    Set rRng = Worksheets("studentlist").Range("A7:A9")

    With Worksheets("Feedback") '<--| reference "Feedback" worksheet

        For Each rCell In rRng '<--| loop through "students" range
            .Range("A1").Value = rCell.Value '<--| write current student number to cell A1 on Feedback sheet

           'do copy ready for paste spec vals to destroy links & calculations
               ActiveSheet.Range("A2:W77").Copy

            'now open new workbook then pastespecial values and formats
             Set NewCaseFile = Workbooks.Add
             NewCaseFile.Sheets(1).Range("A1").PasteSpecial xlPasteValues
             NewCaseFile.Sheets(1).Range("A1").PasteSpecial xlPasteFormats

            'now save as xls with student number as filename Filename:=sPath & rCell.Value & ".xlsx"
             ActiveWorkbook.SaveAs Filename:=rCell.Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

            'now close duplicate file
             ActiveWorkbook.Close False

        Next rCell   '<-- next student number
    End With         '<-- once all done
'turn screen back on
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2021-11-02
    • 2013-08-15
    相关资源
    最近更新 更多