我的VBA根据标准动态写入多个表格并且运行良好。
例如,这里是添加一行,格式化它并前进到下一行。
oDoc.Tables(t).Rows.Add 'add a row below control number
oDoc.Tables(t).Rows(i).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
oDoc.Tables(t).Rows(i).Shading.BackgroundPatternColor = oTableHeaderColor
i = i + 1 'advance to row below control number row.
oDoc.Tables(t).Cell(i, 2).Range.Text = "Check Definition"
我是这样做的,因为我不知道任何给定的表有多少行 - 所以我根据需要创建行,可能很笨拙但是有效。
我需要做的是为带有这样文本的行添加一个可选的复选框。
计划:☐
我尝试了几种似乎不起作用的方法。据我所知,这是因为我没有创建表然后选择它。我试过录制一个宏,然后首先显示关于选择的位。
这就是我所得到的,它会出现错误。
oDoc.Tables(t).Cell(i, 2).Range.Text = "Planned: " & oDoc.Tables(t).Cell(i, 1).Range.ContentControls.Add(wdContentControlCheckBox)
我得到“请求的集合成员不存在。
如果我尝试将它放在两行上,它只会用复选框覆盖单元格1.我似乎无法将它放在单元格的末尾。有任何想法吗?我尝试过insertbefore,但是我必须在同一个单元格中插入几个复选框。
有什么想法吗? 谢谢。
答案 0 :(得分:1)
将文本+复选框+其他文本+第二个复选框添加到一个单元格中非常棘手。
这可能是少数情况之一,您实际上必须使用Selection
对象。
这适用于Word:
Dim oDoc As Word.Document
Set oDoc = ThisDocument
Const t = 1
Const i = 1
Dim rng As Word.Range
Dim iCheck As Long
Dim sLabel As String
Set rng = oDoc.Tables(t).Cell(i, 2).Range
rng.Select
With Selection
.Collapse Direction:=wdCollapseStart
For iCheck = 1 To 3
sLabel = Choose(iCheck, "Planned: ", " Done: ", " Perhaps: ")
.TypeText Text:=sLabel
.Range.ContentControls.Add wdContentControlCheckBox
' move cursor after checkbox
.MoveRight Unit:=wdCharacter, Count:=2
Next iCheck
End With
在Access中,改为使用oWord.Selection
(或者您对Word的引用)。
以下适用于单个复选框,但我无法在其他文本之后创建第二个。
Dim rng As Word.Range
Set rng = oDoc.Tables(t).Cell(i, 2).Range
rng.Text = "Planned: "
' set range to end of cell
rng.Collapse Direction:=wdCollapseEnd
' I'm not entirely sure why this is needed, but without the checkbox goes into the next cell
rng.MoveEnd Unit:=wdCharacter, Count:=-1
rng.ContentControls.Add (wdContentControlCheckBox)