5

我在 Word 文件中有一个表格。下面的这个 vba 程序将遍历所有表格单元格

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

在行中,uResp = uResp & Trim(strCellText) VBA 为每个单元格添加一个换行符和一个点。因此MsgBox uResp将显示一个“列”消息框。如何在显示消息框时删除换行符和点。

4

4 回答 4

12

Word 使用两个字符作为单元格分隔符,所以使用

uResp = uResp & Trim(left(strCellText,len(StrCellText)-2))                

在这种情况下,单元格值之间将没有分隔符,因此您可能需要连接一个空格。

于 2013-03-23T09:57:24.367 回答
2

尝试添加Replace函数和InstrRev以查找最后一个换行符和 . 在单元格文本中,然后离开单元格文本并存储清理后的结果

strCellText = itable.Cell(Row, Col).Range.Text
'added
Clean = Trim(strcelltext)
posFromEnd = InStrRev(Clean, vbCr + chr(7)) 'obviously a newline and a chr(7) ..
If (posFromEnd > 0) Then
    Clean = Trim(Left(Clean, posFromEnd - 1))
End If
'end added
uResp = uResp & Clean  'updated

要验证字符串中的最后一个字符是什么,请在调试器中执行以下操作:

strCellText = itable.Cell(Row, Col).Range.Text
For r = 1 To Len(strCellText)
  c = Mid(strCellText, r, 1)
  Debug.Print Right("0" + Hex(Asc(c)), 2) + " ";
Next
Debug.Print 'set a breakpoint here

从即时窗口复制结果,以便我们可以从那里推理

于 2013-03-23T09:34:12.503 回答
0

如果您确定这总是会发生,您可以将字符串缩短两个字符:

 MsgBox LEFT(uResp,LEN(uResp)-2)

编辑:当然,vinod 是正确的。不是 uResp 必须缩短,而是 strCellText。但是这个答案已经给出了。对不起这个错误。

于 2013-03-23T10:01:33.710 回答
0

我使用的解决方案是:

endOfCell = Chr(13) + Chr(7)
uResp = uResp & Split(strCellText, endOfCell)(0)
于 2017-11-16T13:11:04.687 回答