VBA延迟绑定 - 适用于基于没有Word引用的用户计算机的用户表单

Aur*_*ius 4 excel vba ms-word excel-vba

我有一个excel用户表单/工作表,用于打开Word文档/模板,并将该Word文档保存为PDF,具有特定文件名,位于同一文件夹中.

在我的Excel参考资料中,我启用了Word对象库.我的userform将用于其他未启用这些引用的用户计算机(并且对于所有用户来说都太麻烦).

我的理解是我的代码是"早期绑定",它需要"后期绑定"以绕过其他用户启用Word引用的需要.

我的问题是我不知道或不了解如何使用我的代码执行此操作:

 Dim objWord As Word.Application
 Dim docWord As Word.Document

 Set objWord = CreateObject("Word.Application")
 Set docWord = objWord.Documents.Open(ThisWorkbook.Path & "\MyNewWordDocument.doc")

 docWord.ExportAsFixedFormat OutputFileName:=ThisWorkbook.Path & "\" + Cells(1, 6) + " - Offer Letter.pdf", _
 ExportFormat:=wdExportFormatPDF

 objWord.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
 objWord.Quit
Run Code Online (Sandbox Code Playgroud)

这段代码对我自己来说非常实用.但是,如上所述,由于未启用Word,因此对其他人不起作用.

Ror*_*ory 9

如果其他用户都拥有与您相同版本的Office,则表示您没有问题.如果它们有不同的版本,则需要进行后期绑定,这只涉及将变量声明为Object并声明从Word库中使用的任何常量:

Dim objWord As Object
Dim docWord As Object
const wdExportFormatPDF as long = 17
const wdDoNotSaveChanges as long = 0

Set objWord = CreateObject("Word.Application")
Set docWord = objWord.Documents.Open(ThisWorkbook.Path & "\MyNewWordDocument.doc")

docWord.ExportAsFixedFormat OutputFileName:=ThisWorkbook.Path & "\" + _ Cells(1, 6) + " - Offer Letter.pdf", _
ExportFormat:=wdExportFormatPDF

objWord.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
objWord.Quit
Run Code Online (Sandbox Code Playgroud)

您还应该删除Word引用.

不妨添加一个插件:http://excelmatters.com/2013/09/23/vba-references-and-early-binding-vs-late-binding/

  • @ShaiRado Nope - 我在代码中声明了常量.我更喜欢将字面值放在代码行中. (7认同)