我怎样才能在我的循环的每个迭代中添加一个表?

我使用VBA从excel中生成一个word文档。 我有一个for循环,我想添加一个[1行,1列,有界]表。 这是一个用户可以把他们的评论在一个Word文档内的区域。 当我尝试添加.table.add时,我得到了不同的错误,范围从对象错误。 这是我迄今为止:

Sub GenDocumentables() Worksheets("checklist").Activate Dim wdApp As Word.Application Set wdApp = New Word.Application Dim saveName As String Dim NumberOfCells As Integer With wdApp .Visible = True .Activate 'Debug.Print .Version .Documents.Add With .Selection .InsertBreak Type:=wdPageBreak .ParagraphFormat.Alignment = wdAlignParagraphCenter .BoldRun .Font.Size = 13 .TypeText "Documentable Items for " .TypeText Range("d4").Value .BoldRun .TypeParagraph End With NumberOfCells = Range("a4", Range("a3").End(xlDown)).Count For loopcounter = 1 To 2 ' NumberOfCells With .Selection .Font.Bold = False .Style = wdStyleHeading3 .TypeText Range("a3").Offset(loopcounter, 0).Value & " - " .TypeText Range("a3").Offset(loopcounter, 4).Value .TypeParagraph .Font.Size = 10 .TypeText Range("a3").Offset(loopcounter, 5).Value .TypeParagraph .Font.Italic = True .TypeText "<<Please enter your commentary here. Ensure all aspects of the check content are met>>" .TypeParagraph '-------------------ADD TABLE HERE------------------- End With Next Set myRange = ActiveDocument.Range(0, 0) ActiveDocument.TablesOfContents.Add Range:=myRange, UseFields:=False, UseHeadingStyles:=True, LowerHeadingLevel:=3, UpperHeadingLevel:=1 With .Selection .GoTo What:=wdGoToSection, Which:=wdGoToFirst .InsertBreak Type:=wdPageBreak End With saveName = Environ("UserProfile") & "\Desktop\My Word Doc_" & Format(Now, "yyyy-mm-dd hh-mm-ss") & ".docx" .ActiveDocument.SaveAs2 saveName '.ActiveDocument.Close '.Quit End With MsgBox "done!" End Sub 

由于Selection没有方法,所以你得到了对象错误。表为了解决这个问题,你需要使用下面的代码:

 Set newTable = wdApp.ActiveDocument.Tables.Add(SomeRange,1,1) 

表是Document的成员,您可以使用wdApp.ActiveDocument节来检索它。 在这里,需要定义SomeRange以使其正常工作。

为了让这段代码能够正常运行,可以尝试添加一些variables来简化操作。 回到你声明你的其他variables的地方,添加这些:

 Dim myRange As Word.Range Dim wdDoc As Word.Document Dim newTable As Word.Table 

并在进入循环之前,在创build文档之后添加:

 Set wdDoc = wdApp.ActiveDocument 

接下来,在你的循环内部,但是在你用(.Selection)结束之后,你可以添加:

 Set myRange = wdDoc.Range(wdDoc.Content.End - 1, wdDoc.Content.End) Set newTable = wdDoc.Tables.Add(myRange, 1, 1) newTable.Cell(1, 1).Range.Text = "Hello" Set myRange = wdDoc.Range(wdDoc.Content.End - 1, wdDoc.Content.End) myRange.Select 

我们来看看这个。

  • 首先,它将自定义variablesmyRange设置为文档中的最后一个字符。 这使我们能够将表格放置在已经创build的所有东西之下,
  • 接下来,它在这个位置创build一个表,大小为1×1。
  • 此表中第一个单元格的值设置为“Hello”
  • 接下来的行然后AGAIN将范围设置到文件的底部,然后select它。 这是必要的,因为创build表将select更改为新表的内部。 跳过这一行就可以运行表的循环INSIDE的下一个迭代。

希望这可以帮助。