2013-03-23 54 views
4

我在Word文件中有一个表格。 这VBA程序下面将通过所有的表格单元迭代如何在MS 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附加一个新行和点到每个cell.So MsgBox uResp将显示“列”消息我box.How可以删除换行符和点在显示消息框时。

回答

10

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

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

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

2

尝试添加Replace函数和InstrRev以查找最后一个换行符。在CELLTEXT,然后Left后,CellText和存储清理结果

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 

从即时窗口复制结果所以我们可以推论从那里

+0

问题仍然存在。 – Vinod

+0

Clean的介绍没有效果@ rene,你可以在一个简单的词表中进行验证吗? – Vinod

+1

我想你只需要把Word用来移动到下一个表格单元格的最后两个字符去掉,但是你不想在每个单元格之间放一些分隔符? – grahamj42

0

如果您确信这总会发生,你可以只用两个字符缩短字符串:

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

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

+0

您可以从最终结果中删除最后两个表格单元格。 – Vinod

+0

@Johaness,你可以更新你的答案。 – Vinod

0

我使用的解决方案是:

endOfCell = Chr(13) + Chr(7) 
uResp = uResp & Split(strCellText, endOfCell)(0) 
相关问题