使用VB将Excel转换为PDF并按管理器名称分组

时间:2014-10-14 23:39:37

标签: vba excel-vba pdf-generation excel-2010 excel

我有一个需要更新的工作代码。目前,我有一份包含员工信息的数据表,通过以下代码循环。

每个EmployeeNumber都在仪表板的下拉列表中(这是循环的范围)。仪表板上显示的数据,图形和图片是当前打印到PDF的内容。我希望将经理名称添加到数据中,并能够按经理对我的PDF进行分组。手动对每个员工PDF进行分组是非常耗时的,这正是我们目前正在做的事情。

非常感谢任何帮助或建议!到目前为止,我无法找到与我想做的相匹配的线程,并且正在拼命寻求解决方案。谢谢你的阅读!

这是我到目前为止(打印每个员工PDF并将其保存到文件夹):

Sub PDFexport()

Dim Counter, i As Integer
Dim AOR As String

Sheets("DataSheet").Select
i = 0
Counter = Range("AQ1")

Do While i < Counter

Range("AL1") = Range("AQ4").Offset(i, 0)

AOR = Range("AL1")

i = i + 1
Sheets("dashboard").Select

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\Users\AliceAyers\Documents\WeeklyReport\Week_100814\PDF\" & EmployeeNumber & ".pdf" _
    , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
    :=False, From:=1, To:=1, OpenAfterPublish:=False


Sheets("DataSheet").Select

Loop







End Sub

1 个答案:

答案 0 :(得分:0)

Tim提供的选项是一种很好的内部方式,可以为一位经理创建一个包含所有员工的pdf。 我正在考虑仪表板包含KPI或类似信息,只需创建一个每个报告可以使用的经理文件夹然后使用外部工具合并为PDF(如果需要,如pdftk(www.pdflabs.com))。 PDFtk也是开源的。

Sub PDFexport()

Dim Counter, i As Integer
Dim AOR As String

Sheets("DataSheet").Select
i = 0
Counter = Range("AQ1")

Do While i < Counter

Range("AL1") = Range("AQ4").Offset(i, 0)

AOR = Range("AL1")

i = i + 1
Sheets("dashboard").Select

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\Users\AliceAyers\Documents\WeeklyReport\Week_100814\PDF\" & ManagerNumber & "\" & EmployeeNumber & ".pdf" _
    , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
    :=False, From:=1, To:=1, OpenAfterPublish:=False


Sheets("DataSheet").Select

Loop

MergePDFs

End Sub

在所有文件夹中创建所有PDF后,如果已足够,可以将其保留在那里,或者从vb运行这样的dos命令,并将所有PDF输出到PDF文件夹级别。浏览经理列表,为每个经理创建合并的PDF。对不起,下面不完整,不确定您在哪里有经理列表。

Sub MergePDFs()

Dim doscmd as String

'loop around each manager number
Do

' This sets the PDFtk command 
' Syntax PDFtk [input files] cat output [output file]
Set doscmd = "C:\Program Files (x86)\PDFtk\bin\pdftk.exe C:\Users\AliceAyers\Documents\WeeklyReport\Week_100814\PDF\" & ManagerNumber & "\*.pdf cat output C:\Users\AliceAyers\Documents\WeeklyReport\Week_100814\PDF\" & ManagerNumber & ".pdf"

' execute command in dos shell
RetVal = Shell(doscmd)

Loop

End Sub