2012-07-26 73 views
2

我編寫郵件合併時遇到了一些問題,因爲我的代碼創建的每個內容都必須刪除,以免妨礙合併過程中的下一個字母。使用VBA創建Word之後,刪除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 

你看運行。表格將被正確刪除。但是關於文本和段落呢? 是否有一種方法只是從一個起點到某個終點進行選擇並刪除其所有內容。

回答

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 
相關問題