VBA在单词中选择一个表

时间:2015-08-25 02:06:38

标签: vba ms-word ms-office word-vba

我在word doc中有一个表,我想用VBA来选择特定的单元格。我制作的每个文档都遵循一个模板,该模板具有4xZ表,这意味着我有4列和不同数量的行,具体取决于文档。

我想要做的是选择表格的第3列,除了第1行,因为标题和迭代每个单元格,抓取值并通过switch语句运行它以便我可以更改基于值的单元格颜色。

我找到了这段代码here

Sub SelectColumn()
'Updateby20140510
Dim xColIndex As Integer
Dim xRowIndex As Integer
xIndex = Application.ActiveCell.Column
xRowIndex = Application.ActiveSheet.Cells(Rows.Count, xIndex).End(xlUp).Row
Range(Cells(2, xIndex), Cells(xRowIndex, xIndex)).Select
End Sub

我想我可以修改代码说:

xIndex = Application.ActiveCell.Columns(3)

但是,如果可行并选择第3列和第3列中除第1列以外的所有行,我就不会理解如何继续并开始迭代。我知道迭代代码会是这样的:

For Each oRow In oTbl.Rows
...
Next

但我不知道如何在for循环中引用第3列的选择,2行。有任何想法吗?

编辑1: 我意识到上面的代码是优秀的。因此,经过数小时的挖掘并无济于事,我决定采用快速而肮脏的方法。这是代码:

For Each oClm In ActiveDocument.Tables(1).Columns
        If clmNum = 3 Then
            ' Loop through each cell in the current row.
            For Each oCell In oClm.Cells
                If rowNum = 2 Then
                    ' Set sCellText equal to text of the cell.
                    ' Note: This section can be modified to suit
                    ' your programming purposes.
                    oCellText = oCell.Range
                    oCellText = Left(oCellText, Len(oCellText) - 1)
                    oCellText = CStr(oCellText)

                    Select Case oCellText
                        Case "Complete"
                           oCell.Interior.ColorIndex = wdGreen
                        Case "Partial"
                           oCell.Interior.ColorIndex = wdYellow
                        Case "Incomplete"
                           oCell.Interior.ColorIndex = wdRed
                    End Select
                End If
                rowNum = rowNum + 1
            Next oCell
        End If
        clmNum = clmNum + 1
    Next oClm

现在唯一的问题是,我在switch语句之前断点,oCellText内的值是"完成"但是它会在switch语句中跳过它。我不知道为什么,它应该进入声明,但它的行为并不相同。这就是为什么我有cstr行,我想它没有做任何事情,但没有尝试。

为什么案例陈述失败的任何想法?

编辑2: 我发现案件失败的原因。因为oCellText之后有一个新行。我用以下代码删除了它:

oCellText = Replace(oCellText, Chr(13), "")

但案例陈述仍然没有匹配。有什么想法吗?

编辑3: 我现在一切都工作了。但我只是不高兴我必须通过嵌套的for循环遍历单元格,希望有一种更简单的方法。

1 个答案:

答案 0 :(得分:0)

如果你还在寻找,那就更方便了 你可以直接解决细胞

   for y = 2 to activedocument.tables(1).rows.count

   activedocument.tables(1).cell(3,y).select

    ' do your stuff here

   next y