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 ではセル区切り文字として 2 文字を使用するため、

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

この場合、セル値の間に区切りがないため、スペースを連結することをお勧めします。

于 2013-03-23T09:57:24.367 に答える
2

Replace関数とInstrRevを追加して、最後の改行と . セルテキストで、次にセルテキストを残して、Cleaned の結果を保存します

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

これが常に発生することが確実な場合は、文字列を 2 文字短くすることができます。

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

編集: もちろん、vinod は正しいです。uResp を短くする必要はありませんが、strCellText は短くする必要があります。しかし、この答えはすでに与えられています。間違いをお詫び申し上げます。

于 2013-03-23T10:01:33.710 に答える