【问题标题】:How to cycle through all cells in a word table which is having split cells如何循环遍历具有拆分单元格的单词表中的所有单元格
【发布时间】:2013-03-13 04:35:31
【问题描述】:

我在 MS Word 中有一个 3 X 3(比如 tableA)表。 第 (2,2) 个单元格是一个拆分单元格(拆分为 2X2 表)。 如何循环遍历 tableA 中的所有单元格。

Dim strCellText As String
Dim uResp As String
Dim Row As Integer
Dim Col As Integer

Dim itable As Table


For Each itable In ThisDocument.Tables

    uResp = ""

    For Row = 1 To itable.Rows.Count

        For Col = 1 To itable.Columns.Count

            strCellText = itable.Cell(Row, Col).Range.Text
            uResp = uResp & Trim(strCellText)                

        Next

    Next

    MsgBox uResp
Next

这个程序给出了编译错误:

Run time error 5914
The requested member of the collection does not exist

如何遍历具有拆分单元格的表格的单元格。

【问题讨论】:

  • 哪一行有这个错误?通常,您的代码是正确的,这意味着它会根据需要遍历所有单元格。因此,您的问题出在其他地方,因为我在使用您的代码时没有任何错误。
  • @KazJaw 您是否尝试过使用拆分单元格的表格。
  • 对不起,我错过了这一点,所以我再次检查...

标签: vba split ms-word iteration cell


【解决方案1】:

您应该假设每一行都有最大可能的列数。在你的情况下,那将是四个。为了遍历每个单元格,我建议在第一个循环开始之前设置On Error Resume Next。然后在你的内部循环中,试试这个代码:

strCellText = itable.cell(Row, Col).Range.Text

If Err.Number = 0 Then
    uResp = uResp & Trim(strCellText)
    Debug.Print Row, Col, strCellText
Else
    Err.Clear
End If

【讨论】:

  • +1 因为它也为我解决了这个问题(谢谢!);但这似乎不是最好的选择。对正常的程序流程使用错误处理似乎“呃”。真的没有更好的办法吗?
  • @JaminGrey,你想在你的情况下做什么?循环遍历表格中的所有单元格,无论它们是拆分还是合并?
  • 您提出的方法工作正常,但是(可能来自我的 C++ 背景),对正常和预期的函数流使用错误处理似乎很笨拙。我在 VBA 方面没有经验,我并不是在批评您的正确解决方案,只是惊讶地评论说 VBA 没有提供更清洁的东西(当然,“更清洁”是由于我对过去语言的个人看法而产生的偏见我已经用过的)。 =) 把它归结为新手语言冲击。
  • 我的解决方案是很久以前提供的。但是回答在activedocument的第一个表中循环遍历每个单元格的问题,我建议使用以下代码:For Each C In ActiveDocument.Tables(1).Range.Cells >> 'here do what you need for each cell >> Next C
【解决方案2】:

如果你想遍历 MS Word 文档中所有表格中的所有单元格,即使单元格被合并,我也得到了我想要的结果。试试这个:

Sub CheckingInTheCell
Dim C as Cell
Dim tableCount, Ctr

tableCount = ActiveDocuments.tables.count

for Ctr = 1 to tableCount
   For each C in ActiveDocument.Tables(Ctr).Range.cells
       .....your validations or whatever you would like to do for the cell content
   next C
next Ctr

End Sub

【讨论】:

  • 对不起!代码应该是一行一行的,但都放在一起,我希望你能弄明白 Lav
【解决方案3】:

当我尝试从(有时是格式错误的)表中提取数据时,我遇到了这种情况。我是这样处理的:

检查列数

For each row in table.rows
  if row.cells.count < expectedRows
    'You know you are lacking rows
  else
    'Normal processing
  end if
Next

如果您仍然想要所有数据,请遍历每个单元格

For each row in table.rows
  For each cell in row.cells
    'Process individual cells
  Next
Next

如果垂直合并单元格,这些都不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多