使用Excel在Word文档中添加表

时间:2020-09-23 15:18:55

标签: excel vba ms-word

我正在Excel中创建工具 哪个将读取一些数据并根据该数据创建Word文档。

到目前为止,我已经精通创建Word文档并添加几行文本而没有任何问题。 虽然添加表的下一点引起了问题。 我可以很好地添加表格,但是由于某种原因,它会删除我最初添加的文本行。

这是我的代码:

Dim objWord As Word.Application
Dim objDoc As Word.Document
Dim objSelection As Object
Dim objRange As Object
Dim objTable As Object
Dim ctr as long
            
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
            
Set objDoc = objWord.documents.Add
Set objSelection = objWord.Selection
Set objRange = objDoc.Range

'Adding some heading Text   
objSelection.Style = objDoc.Styles("Heading 1")
objSelection.Font.Bold = True    
objSelection.TypeText ("Heading Text")
objSelection.TypeParagraph

'Adding some normal Text
objSelection.Style = objDoc.Styles("Normal")
objSelection.Font.Bold = False    
objSelection.TypeText ("Normal Text")
objSelection.TypeParagraph

Stop 

'Adding the table    
objDoc.Tables.Add objRange, 10, 2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=wdAutoFitWindow

objWord.Quit SaveChanges:=False
Set objWord = Nothing

在添加了标题和普通文本之后,我在一个停顿点插入了它们,并且它们出现在word文档中。(以下屏幕截图)

但是,一旦代码到达Tables.Add位,我的所有文本都消失了,文档只剩下表格了。 (以下还有截图)

我在网上四处张望,并尝试将 objSelection.Collapse WdCollapseDirection.wdCollapseEnd

在Tables.Add之前的代码行,但这没有帮助。 Screenshot at Stop point

Screenshot After Table is added

2 个答案:

答案 0 :(得分:0)

您添加表的代码失败,因为您正在将表添加到定义为整个文档的objRange中。

您还应该养成在Word和Excel中避免使用Selection对象的习惯。不仅效率低下(必须不断重新绘制屏幕),而且容易出错,因为用户可以将选择更改为您不期望的内容。

下面的代码应该对您有用。

   Dim objWord As Word.Application
   Dim objDoc As Word.Document
   Dim objRange As Word.Range
   Dim objTable As Word.Table
   Dim ctr As Long
            
   Set objWord = CreateObject("Word.Application")
   objWord.Visible = True
            
   Set objDoc = objWord.documents.Add

   'Adding some heading Text
   With objDoc.Paragraphs(1).Range
      .Style = objDoc.Styles(wdStyleHeading1)
      .Font.Bold = True
      .Text = "Heading Text"
      .InsertParagraphAfter
   End With

   'Adding some normal Text
   With objDoc.Paragraphs(2).Range
      .Style = objDoc.Styles(wdStyleNormal)
      .Font.Bold = False
      .Text = "Normal Text"
      .InsertParagraphAfter
   End With

   Set objRange = objDoc.Paragraphs.Last.Range
   'Adding the table
   Set objTable = objDoc.Tables.Add(objRange, 10, 2, _
      DefaultTableBehavior:=wdWord9TableBehavior, _
      AutoFitBehavior:=wdAutoFitWindow)

   objWord.Quit SaveChanges:=False
   Set objWord = Nothing

答案 1 :(得分:0)

我使用下面的代码进行了测试,并且有效:
先决条件:在您的VBA项目中添加引用“ Microsoft Word xx.x对象库”

    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document

    ' create an instance of MS Word
    Set WordApp = CreateObject("word.application")
    WordApp.Visible = True   
    Set WordDoc = WordApp.Documents.Add

    Range("A1:A2").Copy

    WordApp.Selection.TypeText ("Here are my comment")
    WordApp.Selection.Paste
    ' fit the table with window
    WordDoc.Tables(1).AutoFitBehavior wdAutoFitWindow
    ' Save the content into the .doc file
    WordDoc.SaveAs2 ("C:\mypath\myDocument.doc")
相关问题