使用 VBA 向 Word 文档添加连续信息

Adding consecutive information to Word Document using VBA

我正在尝试使用 VBA 将 Excel 中的信息添加到 Word 中,同时将 text/paragraphs 添加到该 word 文档中。

我有以下代码,由于某种原因导致添加了 table 注释。我想添加table然后连续添加内容。

尝试修改段落编号但没有成功?

限定词 - 我是 VBA 的新手,不确定我是否做对了。

这是我的代码:

Sub create_Word()
  
Dim tblRange As Excel.Range
Dim WrdRange As Word.Range
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim WordTable As Word.Table
Dim intRows
Dim intColumns

'Define number of rows
intNoOfRows = 2
intNoOfColumns = 2

' Check if word is open, otherwise open word

On Error Resume Next
Set WordApp = GetObject(class:="Word.Application")
If WordApp Is Nothing Then Set WordApp = CreateObject(class:="Word.Application")

' Make word visible and activate the program
WordApp.Visible = True
WordApp.Activate

' Create document inside word

Set WordDoc = WordApp.Documents.Add

'Section 1

With WordApp.Selection
        
    .Paragraphs.Alignment = wdAlignParagraphLeft
    .Font.Size = 12
    .TypeText "Heading" & vbCrLf & vbCrLf & "Date: _____________" & vbCrLf & vbCrLf
    .BoldRun
    .Font.Size = 12
    .TypeText "Content" & vbCrLf
    .TypeText "Period ended: 31 December 2020" & vbCrLf & vbCrLf
    .BoldRun
    
End With
     
'Add table

Set WrdRange = WordDoc.Paragraphs(11).Range
WordDoc.Tables.Add WrdRange, intNoOfRows, intNoOfColumns
Set WordTable = WordDoc.Tables(1)
WordTable.Borders.Enable = True


End Sub

更新 根据下面的建议,我修改了代码,这导致 tables 出于某种原因合并。已应用以下代码:

Set WordDoc = WordApp.Documents.Add

'Section 1

With WordApp.Selection
        
    .Paragraphs.Alignment = wdAlignParagraphLeft
    .Font.Size = 12
    .TypeText "Test Text 1"
    
End With
     
'Add table 1

Set WrdRange = WordDoc.Paragraphs.Last.Range
Set WordTable = WordDoc.Tables.Add(WrdRange, intNoOfRows, intNoOfColumns)
WordTable.Borders.Enable = True

'Section 2
With WordApp.Selection
   .TypeText "Test Text 2" & vbCrLf
       
End With

'Add table 1

Set WrdRange = WordDoc.Paragraphs.Last.Range
Set WordTable = WordDoc.Tables.Add(WrdRange, intNoOfRows, intNoOfColumns)
WordTable.Borders.Enable = True

您的第一个问题是您在获取Word应用程序后没有重置错误处理。那段代码应该是:

On Error Resume Next
Set WordApp = GetObject(class:="Word.Application")
If WordApp Is Nothing Then Set WordApp = CreateObject(class:="Word.Application")

On Error GoTo 0

您正在尝试向第 11 段添加 table,但据我统计,您的文档仅包含 8 个段落。如果您尝试将 table 添加到文档末尾,那么您可以使用:

Set WrdRange = WordDoc.Paragraphs.Last.Range

或:

Set WrdRange = WordDoc.Characters.Last

Add 方法是一个函数,将 return 添加对象,因此您应该利用它,例如

Set WordTable = WordDoc.Tables.Add(WrdRange, intNoOfRows, intNoOfColumns)
WordTable.Borders.Enable = True

或:

With WordDoc.Tables.Add(WrdRange, intNoOfRows, intNoOfColumns)
    .Borders.Enable = True
End With

您的代码还包含一些未声明的变量。您可以通过在代码模块顶部添加 Option Explicit 来避免这些错误。当您有未声明的变量时,这将阻止您的代码编译。要将其自动添加到新模块,请打开 VBE 并转到工具 |选项。在“选项”对话框中,确保选中“要求变量声明”。

编辑:

停止使用 Selection。在使用 Word 或 Excel.

时,很少需要 select 任何东西

您的 table 正在加入,因为他们彼此关注。这是因为您正在使用 Selection 添加文本,即使当前 selection 在 table.

之前

变化:

With WordApp.Selection
   .TypeText "Test Text 2" & vbCrLf
       
End With 

收件人:

WordDoc.Paragraphs.Last.Range.Text = "Test Text 2" & vbCr

熟悉 VBE 中的帮助工具:Intellisense、对象浏览器和联机帮助。