如何使用VBA在MS Word中剪裁表格单元格的值

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个回答

12

Word使用两个字符作为单元格分隔符,因此请使用

uResp = uResp & Trim(left(strCellText,len(StrCellText)-2))                
在这种情况下,单元格值之间没有分隔符,因此您可能希望连接一个空格。

2
尝试添加 Replace 函数和 InstrRev 函数来查找单元格文本中的最后一个换行符和句点,然后使用 Left 函数截取单元格文本并存储清理后的结果。
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

从立即窗口复制结果,这样我们就可以从那里推理。

Clean的介绍没有产生效果。@rene,你能用简单的表格来做一下并验证一下吗? - Vinod
1
我认为你只需要去掉最后两个字符,这是Word用来移动到下一个表格单元的,但是你难道不想在每个单元格之间放置一些分隔符吗? - grahamj42
@grahamj42。我想要选择表格单元格的值,只作为字符串。我不想要任何单元格之间的分隔符。 - Vinod
1
已验证并修复,Word 在表格单元格中添加了一个换行符(vbCR)和 Chr(7)。 - rene

0
我使用的解决方案是:
endOfCell = Chr(13) + Chr(7)
uResp = uResp & Split(strCellText, endOfCell)(0)

0
如果你确定这种情况一定会发生,你可以将字符串缩短两个字符:
 MsgBox LEFT(uResp,LEN(uResp)-2)

编辑: 当然,vinod是正确的。不是uResp需要缩短,而是strCellText。但是这个答案已经给出了。对于错误我感到抱歉。


你的程序从最终结果中删除了最后两个表格单元。 - Vinod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接