【问题标题】:Create table in Word Document From Access using VBA使用 VBA 在 Access 中的 Word 文档中创建表格
【发布时间】:2016-08-28 15:36:08
【问题描述】:

我正在尝试在我的 Access 数据库中的 Word 文档模板中创建表格。

这段代码可以在 Word 本身中正常运行,并根据需要创建表格。我想知道是否可以从 Access 运行此代码并指向要在其中创建表的特定 Word 文档。

Dim numberOfTables As Integer
Dim iCount As Integer

numberOfTables = InputBox("How many tables to make?", "Tables")

For iCount = 0 To numberOfTables - 1

    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _
        3, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitFixed
    With Selection.Tables(1)
        If .Style <> "Table Grid" Then
            .Style = "Table Grid"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = False
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = False
        '.ApplyStyleRowBands = True 'Office 2010
        '.ApplyStyleColumnBands = False 'Office 2007
    End With

    Selection.EndKey Unit:=wdStory
    Selection.TypeParagraph

Next iCount

【问题讨论】:

  • 您需要问自己如何从外部计算出ActiveDocumentSelection。您是否引用了 Word 对象模型?
  • 是的,有可能。但是您需要知道: 1) 您是否假设 Word 已经在运行? 2)您是否假设目标文档已经打开? 3)如果文档没有打开,如何找到要打开的文档的文件(路径)? 4)一旦文档打开,如何找到应该插入表格的位置?如果没有完整的信息,我们无法为您提供帮助...
  • 1) Word 尚未运行。 2) 目标文档尚未打开。 3)文件路径将在我的 C 驱动器上,例如。 C:\database\template.docx。 4)我假设范围对象可用于设置表格应插入的位置。

标签: ms-access ms-word vba


【解决方案1】:

您需要做的是首先从 Access 中打开一个新的 Word 实例。这是通过以下命令完成的:

Set wrdApp = CreateObject("Word.Application")

然后为了让它可见并添加一个文档,你从那时起使用这个对象:

wrdApp.Visible = True
Set myDoc = wrdApp.Documents.Add   'Here you should also keep the new document as an object so you can directly refer to it

或者,如果您使用模板,则需要打开它:

wrdApp.Visible = True
Set myDoc = wrdApp.Documents.Open ("C:\database\template.docx")

然后是您需要根据上述修改的代码:

For iCount = 0 To numberOfTables - 1

    myDoc.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _
        3, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitFixed
    With myDoc.ActiveWindow.Selection.Tables(1)  
'Note here that for the Selection object you need to refer to the active window
        If .Style <> "Table Grid" Then
            .Style = "Table Grid"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = False
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = False
        '.ApplyStyleRowBands = True 'Office 2010
        '.ApplyStyleColumnBands = False 'Office 2007
    End With

    myDoc.ActiveWindow.Selection.EndKey Unit:=wdStory
    myDoc.ActiveWindow.Selection.TypeParagraph

Next iCount

这应该让你开始。

【讨论】:

  • 抱歉回复晚了。这似乎正是我正在寻找的,但是该文档将已经存储在具有文件路径的文件夹中,例如。 C:\database\template.docx
  • 这种情况下你需要使用Set myDoc = wrdApp.Documents.Open然后你要myDoc.SaveAs以免覆盖模板。
  • 第二行出现错误`myDoc.Tables.Add Range...` 需要运行时错误 424 对象。我不确定我错过了什么
  • 您需要在打开后添加您的文档,例如:Set myDoc = wrdApp.Documents.Open ("C:\database\template.docx")
  • @mekzek 我用打开模板的代码更新了答案。
猜你喜欢
  • 2020-03-28
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多