Domanda

Ho alcuni problemi che programmano una mail unione perché ogni contenuto creato dal mio codice deve essere cancellato per non essere nel modo per la lettera successiva nel processo di fusione.

Quindi ho scritto una macro di prova solo per creare alcune tabelle ed eliminarli.

Ecco i miei progressi: può essere eseguito in un nuovo file word vuoto con un segnalibro chiamato "Test"

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
.

Vedi.Le tabelle verranno cancellate correttamente.Ma cosa riguarda il testo e i paragrafi? C'è un metodo per effettuare semplicemente una selezione da un punto iniziale ad un certo punto finale ed eliminare tutto il suo contenuto.

È stato utile?

Soluzione

OK - Ho trovato una soluzione facile usando la possibilità di definire un intervallo da un punto iniziale a un punto finale di altre gamme. Ma poiché la posizione delle gamme è abbastanza instabile (specialmente quando si mescolano testo e tabelle) si può utilizzare un segnalibro di helper per definire il punto di partenza.

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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top