我使用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文件格式。
答案 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