Ms access 使用查询访问VBA合并单词模板

Ms access 使用查询访问VBA合并单词模板,ms-access,ms-word,vba,Ms Access,Ms Word,Vba,我想在Word中创建一个模板,然后使用Access将数据合并到其中。访问数据具有不同级别的分组。在每个分组中,有一些子查询也可能有分组。由于存在分组,某些页面将需要重复 示例:我有一个打印教室详细信息的查询。每个教室里也有很多学生。所以,我希望有一个DOTM模板,可以按班级对每个学生进行分组。然后打印第一节课的详细信息,然后打印学生,然后继续下一节课,然后打印学生,等等 访问表/查询等不是问题。这是创建一个模板,然后合并它,我有问题。现在,我只有一个简单的模板(Dotm文件)。这个文件有一些样板

我想在Word中创建一个模板,然后使用Access将数据合并到其中。访问数据具有不同级别的分组。在每个分组中,有一些子查询也可能有分组。由于存在分组,某些页面将需要重复

示例:我有一个打印教室详细信息的查询。每个教室里也有很多学生。所以,我希望有一个DOTM模板,可以按班级对每个学生进行分组。然后打印第一节课的详细信息,然后打印学生,然后继续下一节课,然后打印学生,等等

访问表/查询等不是问题。这是创建一个模板,然后合并它,我有问题。现在,我只有一个简单的模板(Dotm文件)。这个文件有一些样板文件和一些书签。然后,我使用以下代码与dotm文件交互:

Dim objWord As Word.Application
Dim PauseTime, Start, Timer As Integer
Dim wrkCurrent As DAO.Workspace

Set objWord = CreateObject("Word.Application")
objWord.Visible = False 'True is visible

Dim sql As String
sql = "SELECT * FROM tbl_School"  'ex query that produces more that one record
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Set wrkCurrent = DBEngine.Workspaces(0)
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(sql)

objWord.Documents.Add ("C:\test\Test.dotm")
'this template has one page, with one bookmark, School_Name.  What I want
' to happen is that, for every record, create a new page, with this 
'bookmark filled in.
If (Not rst.EOF) Then
    With rst
        Do Until .EOF
            objWord.ActiveDocument.Bookmarks("School_Name").Select
            objWord.Selection.Text = rst!school_name
            .MoveNext
        Loop
    End With
End If

objWord.ActiveDocument.SaveAs ("C:\test\MyNewDocument.docx")
objWord.PrintOut
objWord.Quit
Set objWord = Nothing

问题是,这只打印第一个,然后是错误。我将如何进行分组?仅供参考,我知道我可以在报告中这样做,但我必须允许将报告导出到Word,保留导出时丢失的图像、图形等。

您在这里遇到了几个问题。第一个问题是,最好使用邮件合并,而不是书签。mailMerge允许您为每个记录创建具有不同页面的文档。如果你想做书签,那么你还有其他问题。用文本替换书签时,书本标记将被删除。请参见此处以保留书签。。。。除此之外,即使您正确地替换了书签,您也在尝试一次又一次地替换书签。代码中没有任何内容会添加新页面…@OpiesDad Mmm,但mail merge不会执行分组/子查询。对于这项任务,建议这样做毫无意义……是的,这是我的问题。我需要考虑分组。也许书签不是解决这个问题的最佳方式,但我也不确定合并是否是。我认为有能力拉入模板,用数据填充它,并将其添加到父文档中,这可能会起作用。但是,我不确定这是否可行。@Cindymister你是对的,我应该多考虑一下。然而,我提到的书签问题是准确的。Jason,我同意@OpiesDad分析,但mailmerge评论除外。研究将重复的元素保存为构建块。您可以将用于此目的的构建块存储在模板本身中,并根据需要插入它们。BB可以包含一个/多个书签。既然您在写入书签后不需要重新使用它,那么如果您的代码在写入书签时删除它,这也不是问题。然后每次插入BB时,书签都会再次出现。这里有几个问题。第一个问题是,最好使用邮件合并,而不是书签。mailMerge允许您为每个记录创建具有不同页面的文档。如果你想做书签,那么你还有其他问题。用文本替换书签时,书本标记将被删除。请参见此处以保留书签。。。。除此之外,即使您正确地替换了书签,您也在尝试一次又一次地替换书签。代码中没有任何内容会添加新页面…@OpiesDad Mmm,但mail merge不会执行分组/子查询。对于这项任务,建议这样做毫无意义……是的,这是我的问题。我需要考虑分组。也许书签不是解决这个问题的最佳方式,但我也不确定合并是否是。我认为有能力拉入模板,用数据填充它,并将其添加到父文档中,这可能会起作用。但是,我不确定这是否可行。@Cindymister你是对的,我应该多考虑一下。然而,我提到的书签问题是准确的。Jason,我同意@OpiesDad分析,但mailmerge评论除外。研究将重复的元素保存为构建块。您可以将用于此目的的构建块存储在模板本身中,并根据需要插入它们。BB可以包含一个/多个书签。既然您在写入书签后不需要重新使用它,那么如果您的代码在写入书签时删除它,这也不是问题。然后,每次插入BB时,书签将再次出现。