我有一个 VBA 子例程,它对 Word 文档执行各种格式化。它依赖于 Selection 对象 (Selection.WholeStory) 来应用格式。
这个子例程从 VBA Outlook 中调用,带有一个 Word.Application 对象。
出现的问题是:当调用宏时打开另一个 Word 实例时,选择对象指的是已经打开的 Word 文档,而不是在我的宏中创建的处理程序。
VBA 似乎没有限定选择对象,因此当您编写 Selection.PageSetup (ie) 并开始应用更改时,它会应用于已在 Word 中打开的文档,而不是您正在从 VBA 处理的文档。
我在 MSDN 和这里四处寻找答案,但没有运气。如果有人知道如何限定这个对象,请告诉我。谢谢。
基本上,
create word handler
open attachment in word
Selection.WholeStory
With Selection.PageSetup
.LineNumbering.Active = False
.Orientation = wdOrientPortrait
/* etc */
End with
由于无法限定“选择”,因此所有这些更改都会对已打开的内容进行。
if numTextFiles >= 1 then
for each textFile in textFileNames
'Open text file in word
Set doc = WordApp.Documents.Open(outReportFullDir & "\" & textFile)
'Set the output name of word doc (change .txt to .docx)
reportWordName = left(textFile, len(textFile) - 4)
reportWordName = reportWordName & ".docx"
'Check if out word document already exists
preventOverwrite(outReportFullDir & "\" & reportWordName)
'Format Reports
formatReport()
'etc
_
Private Sub formatReport()
documents(docToFormat).select
Selection.WholeStory
'Added by Ryan to make single-spaced
WordBasic.OpenOrCloseParaBelow
WordBasic.OpenOrCloseParaBelow
Selection.Font.Name = "Courier New"
Selection.Font.Size = 8
With Selection.PageSetup
.MirrorMargins = False
.TwoPagesOnOne = False
.BookFoldPrinting = False
.BookFoldRevPrinting = False
.BookFoldPrintingSheets = 1
.GutterPos = wdGutterPosLeft
End With
End Sub