Word VBA将文本放在一个表中

时间:2015-06-26 22:13:28

标签: vba ms-word word-vba

我试图将文本放在MS Word的表格中,该表格包含第一行和第2行中的标题,然后是文本应该放到的另一行。

填充表格的文本更准确地说是用户文本TextBox3

因此,如果TextBox3包含:

汽车注册服务经理

我希望桌子看起来像这样:

 Header#1  | Header#2

Automotive | 85,000 
Registered | 77,000 
Services   | 32,000 
Manager    | 500,00

标题#2中的数字来自excel的数据库,我可以决定手动执行此操作,也可以稍后处理它,如果我遇到困难我会寻求帮助但是现在我正在努力解决的问题是表,因为我只有1行,我想粘贴信息,

我尝试使用:

Dim tmpArray As Variant
tmpArray = Split(TextBox3, " ")


Dim i As Integer
For i = 1 To UBound(tmpArray)

    ActiveDocument.Tables(1).Cell(i, 1).Range = tmpArray(i - 1)
    Selection.TypeParagraph



Next i

但即使我有TypeParagraph代码只写第二个字,让我给你完整的代码,看看我们能想出什么。

Private Sub CommandButton1_Click()
With ActiveDocument
    .Bookmarks("bmCN").Range _
    .InsertBefore TextBox1
    .Bookmarks("bmOriJob").Range _
    .InsertBefore TextBox2
    .Bookmarks("bmOptJob").Range _
    .InsertBefore TextBox3
    .Bookmarks("bmJobD").Range _
    .InsertBefore TextBox4
    .Bookmarks("bmJobRes").Range _
    .InsertBefore TextBox5
    .Bookmarks("bmJobR").Range _
    .InsertBefore TextBox6
    .Bookmarks("bmBen").Range _
    .InsertBefore TextBox7
    .Bookmarks("bmTag").Range _
    .InsertBefore TextBox8
End With
'Temporary array
Dim tmpArray As Variant
    tmpArray = Split(TextBox3, " ")


Dim i As Integer
For i = 1 To UBound(tmpArray)

    ActiveDocument.Tables(1).Cell(i, 1).Range = tmpArray(i - 1)
    Selection.TypeParagraph



Next i
UserForm1.Hide
    Selection.WholeStory
    Selection.Fields.Update
    Selection.Collapse Direction:=wdCollapseEnd
End Sub

谢谢,

1 个答案:

答案 0 :(得分:0)

问题在于循环中的数组索引。由于i的最大值为UBound(tmpArray)而您将单元格设置为tmpArray(i - 1),因此您将始终省略最后一个数组元素。您也是第一次通过循环时在标题行(Cell(1, 1))中开始。最后,直接使用文档的Range对象不会影响选择哪个Range,因此Selection.TypeParagraph将始终位于运行代码之前的选择位置。因为这是在你的循环中,我猜这不是理想的行为。最后,您应该在第一时间获取对ActiveDocument的引用,并根据需要在Subs之间传递它。它不仅比连续解除引用全局更有效,还避免了在代码运行时用户交互可能更改活动文档的情况。

这样的事情应该有效:

Dim doc As Document
Set doc = ActiveDocument

'...

Dim tmpArray As Variant
tmpArray = Split(TextBox3.Text, " ")

Dim i As Integer
For i = 0 To UBound(tmpArray)
    doc.Tables(1).Cell(i + 2, 1).Range = tmpArray(i)
Next i