我试图将文本放在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
谢谢,
答案 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