我希望捕获 Microsoft Project 视图的屏幕截图(表格数据和视图的甘特图部分),保存为 pdf,以便可以将 PDF 作为 OLE 对象加载到 Excel 工作表中。我尝试过 EditCopy 和 EditCopyPicture,但它们都可以通过 Office 剪贴板工作。办公室剪贴板仅限于 24 张图像,并且不会自行清理。也没有明显的能力告诉剪贴板在放置到剪贴板上时是否保留/删除任何图像。似乎也没有任何方法可以使用 VBA 清除 Office 剪贴板,尽管有使用 Windows 代码清除剪贴板的示例,但我怀疑这可能是与 Office 剪贴板不同的 Windows 剪贴板。我当前流程的问题是它使用办公室剪贴板,
我使用的是 64 位 Windows 机器,带有 Microsoft Office Project 2019 和 Office Pro 2019 套件。
由于我想作为 OLEObject 加载的文件类型是 PDF 或 xps,有没有一种方法可以使用 Fileprint 或 Printout 命令将 Microsoft Project 中的当前视图保存到 pdf 或 xps 文件中,然后将其合并到我的过程。我需要能够定义甘特图显示的开始和结束日期,能够定义保存的文件名,以及定义我希望 PDF/XPS 导出文件制作的页数它尽可能可读。我目前使用 C:\export\export.xps 作为文件名和文件路径。
理想的做法是创建 PDF 并将其作为 OLEObject 加载到 excel 电子表格中是一个步骤,但我还没有找到任何可以完成此操作的代码。我已将大量代码移植到启用宏的电子表格中,以便由 excel 执行,这为我节省了 MS Project 为这部分代码所花费的 90% 的处理时间。如果我能够保存 MS Project 屏幕的 pdf,我将拿起 PDF 并在 excel 代码中继续该过程。我可能需要在 Fileprint 命令之前和之后添加 Application.UpdateDisplay 代码以避免看到对话框。这是我的工作代码。唯一不起作用的部分是我能够创建过滤器 MS 项目屏幕上显示的内容的 pdf:
'show 12 columns and move the splitter
Application.SetSplitBar ShowColumns:=11
'adjust timescale to show weeks
TimescaleEdit MajorUnits:=0, MinorUnits:=3, MajorLabel:=0, MinorLabel:=17, MinorTicks:=True,
Separator:=True, TierCount:=2
TierCount:=2
If Order >= 20 Then
'ScaleRow = Int(100 * 18 / Order)
ScaleRow = Int(100 * 24 / Order)
Else
ScaleRow = 70
End If
TimescaleEdit Enlarge:=ScaleRow, Separator:=True, TierCount:=2
SelectRow
localfin = Now()
Debug.Print "Iteration Prep for SRA Summary Page- " & (((localfin - localst) * 24 * 60 * 60) & "
sec!")
localst = Now()
SelectAll
Application.WrapText (3)
Sort Key1:="Number10", Ascending1:=True
CalculateAll
fullpath = "C:\Export\export.pdf"
Debug.Print "MinDate= " & MinDate & " MaxDate= " & MaxDate
Application.PrintOut copies:=1, Preview:=False, ActivePrinter:="Microsoft Print To PDF",
Fromdate:=MinDate, todate:=MaxDate, PrToFileName:=fullpath, PrintToFile:=True
localfin = Now()
Debug.Print "Sort & PrintToPDF- " & (((localfin - localst) * 24 * 60 * 60) & " sec!")
localst = Now()
MinDate 和 Maxdate 是显示在任务筛选视图上的最早和最晚日期。我正在计算整个过程的执行时间,以确定我应该在哪里尝试优化编码。Scalerow 是一个缩放因子,我试图平衡文本字段所需的屏幕份额与甘特图的屏幕右侧。我还可以根据 Mindate 和 MaxDate 之间的周数影响时间刻度数据以更改为甘特图的每周、每月或每季度显示。我还可以以合理的比例确定我需要捕获屏幕数据以供以后显示的页面数。
我曾尝试使用 documentexport,但认为此命令仅限于导出甘特图显示的文本部分。
crosoft 文档(“https://docs.microsoft.com/en-us/office/vba/api/Project.Application.DocumentExport”)表明它应该适用于 Microsoft 项目,但我无法保存任何内容使用此命令转换为 PDF/XPS 文件。我想要/需要做的就是能够创建一个 pdf 文件(可能通过选择打印机,将其设置为默认值并打印,尽管我没有成功找到任何代码来帮助我到达那里)。我正在尝试使用“Microsoft Print to PDF”打印机。
任何帮助表示赞赏。