在Word表

时间:2016-10-04 13:07:19

标签: ms-word access-vba

我的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,但是我必须在同一个单元格中插入几个复选框。

有什么想法吗? 谢谢。

1 个答案:

答案 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)