2

マージプロセスの次の文字の邪魔にならないように、コードによって作成されたすべてのコンテンツを削除する必要があるため、メールマージのプログラミングに問題があります。

そこで、いくつかのテーブルを作成して削除するためだけにテストマクロを作成しました。

これが私の進捗状況です-「テスト」と呼ばれるブックマークを使用して、新しい空のWordファイルで実行できます

Sub TabsNText()

    Const k As Integer = 2

    Dim doc As Document
    Dim rng As Range
    Dim tab_rngs(k) As Range
    Dim txt_rngs(k) As Range
    Dim tbl As Table

    Set doc = Word.ActiveDocument
    Set rng = doc.Bookmarks("test").Range

    Dim i As Integer

    For i = 1 To k
        Set txt_rngs(i) = rng
        rng.Text = "Title " & i

        rng.Collapse Direction:=wdCollapseEnd
        rng.InsertParagraphAfter
        rng.Collapse Direction:=wdCollapseEnd

        Set tab_rngs(i) = rng

        Set tbl = doc.Tables.Add(rng, 3, 3)
        tbl.Cell(1, 1).Range.Text = "Table" & i
        tbl.Borders.Enable = True

        Set rng = tbl.Range

        rng.Collapse Direction:=wdCollapseEnd
        rng.InsertParagraphAfter
        rng.Collapse Direction:=wdCollapseEnd
    Next i

    rng.Select

    MsgBox ("Now, let's delete that!")

    For i = 1 To k
        txt_rngs(i).Text=""
        tab_rngs(i).Tables(1).Delete
        doc.Bookmarks.Add Name:="test", Range:=rng
    Next i

End Sub

分かりますか。テーブルは適切に削除されます。しかし、テキストと段落はどうですか?始点から終点までを選択して、その内容をすべて削除する方法はありますか?

4

1 に答える 1

0

わかりました-他の範囲の開始点から終了点までの範囲を定義する機能を使用して、簡単な解決策を見つけました。ただし、範囲の位置は非常に不安定であるため(特に、テキストとテーブルを混在させる場合)、ヘルパーブックマークを使用して開始点を定義できます。

Sub TabsNText()

    Const k As Integer = 2

    Dim doc As Document
    Dim rng As Range
    Dim tbl As Table
    Const startbkm As String = "test_start"
    Const insertbkm As String = "test"

    Set doc = Word.ActiveDocument
    Set rng = doc.Bookmarks(insertbkm).Range

    doc.Bookmarks.Add Name:=startbkm, Range:=rng

    Dim i As Integer

    For i = 1 To k
        rng.Text = "Title " & i

        rng.Collapse Direction:=wdCollapseEnd
        rng.InsertParagraphAfter
        rng.Collapse Direction:=wdCollapseEnd

        Set tbl = doc.Tables.Add(rng, 3, 3)
        tbl.Cell(1, 1).Range.Text = "Table" & i
        tbl.Borders.Enable = True

        Set rng = tbl.Range

        rng.Collapse Direction:=wdCollapseEnd
        rng.InsertParagraphAfter
        rng.Collapse Direction:=wdCollapseEnd
    Next i

    MsgBox ("Now, let's delete that!")

    doc.Range(doc.Bookmarks(startbkm).Range.start, _
              rng.End).Delete

    doc.Bookmarks.Add Name:=insertbkm, Range:=rng
    doc.Bookmarks(startbkm).Delete


End Sub
于 2012-07-26T14:04:39.437 に答える