【问题标题】:Converting multiple visio file to pdf through Excel VBA通过Excel VBA将多个visio文件转换为pdf
【发布时间】:2016-10-04 05:00:42
【问题描述】:

我遇到了这段代码的问题。 此代码的目的是将文件夹中保存的所有 visio 文件从 EXCEL VBA 宏转换为 pdf...

使用此代码,我可以打开 visio 文件但无法转换为 pdf 文件....它显示“需要对象”错误....

FName = myPath & myFile
    Dim objDoc: Set objeDoc = VisioApp.documents.Open(FName)
objDoc.ExportAsFixedFormat VisFixedFormatTypes = 1, FName, VisDocExIntent = 1, VisPrintOutRange = 0

我遇到了上述问题

Sub LoopAllExcelFilesInFolder()

Dim wb As Workbook
Dim myPath As String
Dim myFile As String
Dim myExtension As String
Dim FldrPicker As FileDialog
Dim FName As String

'Optimize Macro Speed
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual
'Retrieve Target Folder Path From User
  Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker)
    With FldrPicker
      .Title = "Select A Target Folder"
      .AllowMultiSelect = False
        If .Show <> -1 Then GoTo NextCode
        myPath = .SelectedItems(1) & "\"
    End With
'In Case of Cancel
NextCode:
  myPath = myPath
  If myPath = "" Then GoTo ResetSettings
'Target File Extension (must include wildcard "*")
  myExtension = "*.vsd"
'Target Path with Ending Extention
  myFile = Dir(myPath & myExtension)
'Loop through each Excel file in folder

  Do While myFile <> ""


    Set VisioApp = CreateObject("Visio.Application")
    FName = myPath & myFile
    Dim objDoc: Set objeDoc = VisioApp.documents.Open(FName)

   'Application.ActiveDocument.ExportAsFixedFormat visFixedFormatPDF, "C:\Users\20098323\Desktop\BHAVIK\VAC-30001.pdf", visDocExIntentPrint, visPrintAll, 1, 53, False, True, True, True, False
objDoc.ExportAsFixedFormat VisFixedFormatTypes = 1, FName, VisDocExIntent = 1, VisPrintOutRange = 0
      myFile = Dir
  Loop
'Message Box when tasks are completed
  MsgBox "Task Complete!"
ResetSettings:
  'Reset Macro Optimization Settings
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub

【问题讨论】:

  • 除非您添加了对 Visio 对象库的引用,否则 VBA 将无法识别那些 visXxxxxx 常量。如果您使用 Option Explicit 会提醒您注意问题。
  • 但是我应该在这段代码中做什么样的改变?
  • 在代码模块顶部添加 Option Explicit。这将向您指出您将变量拼错为objeDoc。此外,我不确定您对这些参数做了什么,但这不符合我的任何建议。

标签: vba excel pdf macros visio


【解决方案1】:
Set VisioApp = CreateObject("Visio.Application")
FName = myPath & myFile
VisioApp.documents.Open FName
Application.ActiveDocument.ExportAsFixedFormat visFixedFormatPDF, _
             FName, visDocExIntentPrint, visPrintAll, _
             1, 53, False, True, True, True, False

在此处创建 Visio VisioApp 的实例,但在最后一行中使用 Application - 默认情况下,这将引用运行代码的 Excel,而不是 Visio。您需要将其替换为 VisioApp

此外,您正在使用 Visio 对象库(visFixedformatPDF 等)定义的某些常量。 Excel VBA 不知道这些常量的值,因此您可以执行以下操作之一:

  1. 在 Excel VBProject 中添加对 Visio 对象库的引用
  2. 将常量替换为其数值(您可以在 Visio VBE 对象浏览器中查找)
  3. 在 Excel VBA 代码的顶部定义常量和它们的值。例如:

    常量 visFixedFormatPDF = 1

【讨论】:

  • II 已将我的代码更改如下...Nw 它显示“需要对象”错误... FName = myPath & myFile Dim objDoc: Set objDoc = VisioApp.documents.Open(FName) 'Application .ActiveDocument.ExportAsFixedFormat visFixedFormatPDF, "C:\Users\20098323\Desktop\BHAVIK\VAC-30001.pdf", visDocExIntentPrint, visPrintAll, 1, 53, False, True, True, True, False objDoc.ExportAsFixedFormat VisFixedFormatTypes = 1, FName , VisDocExIntent = 1, VisPrintOutRange = 0
  • 更新您的问题以添加您修改后的代码,并准确指出哪一行有错误。
猜你喜欢
  • 1970-01-01
  • 2017-01-31
  • 2021-08-20
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多