我怎样才能在我的循环的每个迭代中添加一个表?
我使用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的下一个迭代。
希望这可以帮助。
- 有没有更简单的方法来重复插入行的列表底部?
- VBA(excel 2010)如果错误(如#N / A),然后移动到下一行
- 如何匹配来自2张不同的工作表的数据,并在excel中匹配?
- vba outlook签名与发件人姓名
- Excel中是否有一个类似于Ruby的分割方法的函数?
- 表/范围select(组合)不起作用
- 为什么Excel / Word 2013开始隐形?
- 使用Apache POI打开.xlsx文件会导致出现NoClassDefFoundError InvalidFormatExceptionexception
- 如何格式化我的导出到excel工作簿在microsoft.office.interop.excel?