访问:Word自动化页眉和页脚

时间:2011-06-28 18:45:17

标签: ms-access vba ms-office

我使用Access通过书签将文本发送到Word。我在页眉和页脚中有书签,但是当我尝试将文本发送给它时会收到错误:“ Word无法找到所请求的书签。

我使用以下代码将文本发送到Access

' Create a Word document from template.
Dim WordApp As Word.Application
Dim strTemplateLocation As String
Dim myVariable = “TEST!!”

' Specify location of template
strTemplateLocation = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\")) & "test.dot"

Set WordApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
    Set WordApp = CreateObject("Word.Application")
End If

WordApp.Visible = True
WordApp.WindowState = wdWindowStateMaximize
WordApp.Documents.Add Template:=strTemplateLocation, NewTemplate:=False


' Replace each bookmark with field contents.
WordApp.Selection.GoTo what:=wdGoToBookmark, Name:="myBookmark"
WordApp.Selection.TypeText myVariable

DoEvents
WordApp.Activate
Set WordApp = Nothing

我正在使用Office 2003文件格式。

1 个答案:

答案 0 :(得分:1)

首先,您必须确保每个Word书签都是唯一的。我们一直使用Access作为Word的自动化引擎,这可能是一个容易犯的错误。如有疑问,请删除Word模板中的书签并将其重新插入。

这里有一些代码可以帮助您实现目标。让我们首先声明一些变量,特别是Word文档与Word应用程序一起作为对象,因为你是后期绑定。

Dim WordApp As Object
Dim objDoc As Object

或者,如果你能早点绑定......

Dim WordApp As Word.Application
Dim objDoc As Word.Document

接下来,您知道如何设置WordApp对象,但我会设置我的文档对象以给我更多的灵活性。

Set objDoc = WordApp.Documents.Add Template:=strTemplateLocation, NewTemplate:=False

我通常在子例程中有下一节,我只是将书签名称和值作为字符串传递。同样,您可以将相同的变量发送到任意数量的书签,但您必须在Word模板中包含唯一的书签名称。

If objDoc.Bookmarks.Exists(sBookmark) = True Then

    objDoc.Bookmarks(sBookmark).SELECT
    WordApp.Selection = sValue

End If

然后,当您打开Word时,您似乎遇到了一些麻烦。如果有这样的事情,我宁愿把事情恢复到“正常”。 :)

With WordApp

    If .ActiveWindow.View.SplitSpecial <> 0 Then
        .ActiveWindow.Panes(2).Close
    End If

    If .ActiveWindow.ActivePane.View.Type = 1 Or .ActiveWindow.ActivePane.View.Type = 2 Then
        .ActiveWindow.ActivePane.View.Type = 3
    End If

    .ActiveWindow.ActivePane.View.SeekView = 0

End With