Elimina testo e tabelle in parola dopo la loro creazione con VBA
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.
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
.