0

我有一个 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
4

2 回答 2

2

Word 的选择对象和 Outlook 的选择对象之间可能存在混淆。

利用

WordApp.Selection

IE

WordApp.Selection.WholeStory
WordApp.Selection.Font.Name = "Courier New"

等等

(或例如

Dim sel as Word.Selection
Set sel = WordApp.Selection
sel.WholeStory
sel.Font.Name = "Courier New"
Set sel = Nothing

因此,如果 WordApp 不在范围内,您应该可以使用类似

Set sel = doc.Application.Selection

)

最后,如果您可以改用 Word Range,我会这样做(例如 doc.Range 或 Doc.Content)并避免使用整个选择。

于 2013-11-15T15:55:00.487 回答
0

你有没有尝试过这样的事情?看起来您在游戏的某个阶段获得了对正确文档的正确引用。

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
        Call formatReport(doc)
'etc



Private Sub formatReport(ByRef doc)

    documents(doc).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
于 2013-11-15T02:55:02.840 回答