excel - Excel VBA 用户窗体打印屏幕另存为 pdf
问题描述
我有用户表单,我有按钮来获取用户表单的打印屏幕,粘贴到新创建的工作表并将其导出为 pdf。我对当前代码的问题是:
1)我想将打印屏幕适合一页,现在它需要打印屏幕并分成两页。
2) 更高的打印屏幕分辨率。是否可以提高打印屏幕的分辨率以获得更高的质量?
我用于用户窗体上的按钮的代码:
Private Sub btnPrintPDF_Click()
'change to your button name
Dim pdfName As String
Dim newWS As Worksheet
Application.DisplayAlerts = False
keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
DoEvents 'Otherwise, all of screen would be pasted as if PrtScn rather than Alt+PrtScn was used for the copy.
Set newWS = ThisWorkbook.Worksheets.Add(After:=Worksheets(Worksheets.Count))
newWS.PasteSpecial Format:="Bitmap", Link:=False, DisplayAsIcon:=False
pdfName = ThisWorkbook.Path & "\" & Sheets("MAIN").Range("D14").Value & "Project_Summary" & "_" & " " & Format(Now, "yyyy-mmm-dd") & ".pdf"
newWS.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:=pdfName, Quality:=xlQualityStandard, _
IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
newWS.Delete
Unload Me
Application.DisplayAlerts = True
ThisWorkbook.Sheets("MAIN").Activate
End Sub
解决方案
Application.PrintCommunication = False
With newWS.PageSetup
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1
End With
Application.PrintCommunication = True
ewWS.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=pdfName, Quality:=xlQualityStandard, _
IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
推荐阅读
- javascript - getParameter 使用 Fetch API 返回 null
- python - 如何限制 Pygame 角色的移动?
- javascript - parseInt() 和 Number.isInteger() 在以下 Javascript 数组场景中的功效差异?
- list - 如果全部匹配,如何比较列表的值并返回 true?
- linux - 当 grep 返回结果时重新启动程序
- javascript - JS Promises:.then 语法和 async/await 之间的关系(Apollo 客户端示例)
- typescript - 使用 Jest 在命名空间中测试 Typescript 类
- watchkit - 如何在不使用锻炼课程的情况下在 watchOS 3+ 中获取心率
- c++ - 了解 declval 优化实现
- java - 添加新成员变量后反序列化旧对象:Java