|
本帖最后由 lfspecter 于 2015-10-14 13:30 编辑
PDF Export from Excel 2.0.xls.zip
(1.36 MB, 下载次数: 67)
以下代码是08年的时候 stanleypan版主帮忙写的,目的是在一个Excel文件中把PDF文档导出另存。
现在版本升级了,请帮忙看看如果在07中正常使用。
- Option Explicit
- Public Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
- Public Const VK_CONTROL = &H11
- Public Const VK_V = &H56
- Public Const VK_LEFT = &H25
- Public Const KEYEVENTF_EXTENDEDKEY = &H1
- Public Const KEYEVENTF_KEYUP = &H2
- Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
- Const Vital = "Sheet1"
- Public iret As Long
- Public curWindow As Long
- Sub LoopSheet()
- Dim sPath As String, sPathDest As String
- Sheets(Vital).Activate
- Application.ScreenUpdating = False
- Dim myobject As Object
- On Error Resume Next
- For Each myobject In Sheets(Vital).Shapes
- Debug.Print Sheets(Vital).Shapes.Count
- Debug.Print myobject.Name
- Debug.Print myobject.Type 'msoEmbeddedOLEObject=7
- Debug.Print myobject.OLEFormat.progID ' "AcroExch.Document.7"
- 'Debug.Print myobject.OLEFormat.Object.SourceName
- ' : Type : msoAutoShape : MsoShapeType : ModExportPDF.LoopSheet
- If myobject.Type <> msoEmbeddedOLEObject Then Exit For
- sPath = Application.ThisWorkbook.Path
- sPathDest = sPath & "" & "PDF"
- ' On Error Resume Next
- If FolderExists(sPathDest) = True Then
- Else
- Call MkDir(sPathDest)
- End If
- sPathDest = sPathDest & ""
- '--Copy 出来了---如何导出必须用到更高深的API了.
- ShellExecute 0, "open", sPathDest, "", sPathDest, 1
- ActiveSheet.Shapes(myobject.Name).Select
- myobject.Copy
- 'using API keybd event
- keybd_event VK_CONTROL, 0, 0, 0
- keybd_event VK_V, 0, 0, 0 ' press Ctrl-V - Paste keys
- DoEvents
- keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0 'Release
- keybd_event VK_V, 0, KEYEVENTF_KEYUP, 0 'Release
- DoEvents
- Dim Start As Long
- 'slow things down
- Start = Timer + 1.2
- While Start > Timer
- DoEvents
- Wend
- Next
- On Error GoTo 0
- Application.ScreenUpdating = True
- 'Exit Sub
- End Sub
- Public Function FolderExists(ByVal Path As String, Optional ByVal Att As VbFileAttribute = -1) As Boolean
- On Error Resume Next
- If Att = -1 Then
- FolderExists = VBA.GetAttr(Path)
- Else
- FolderExists = VBA.GetAttr(Path) And Att
- End If
- End Function
复制代码
|
|