我有一些编程邮件合并的问题,因为我的代码创建的每个内容都必须删除,以便在合并过程中不会妨碍下一个字母。
所以我写了一个测试宏来创建一些表并删除它们。
这是我的进展-它可以在一个新的空Word-File中运行,并带有一个名为"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你看。表将被正确删除。但是文本和段落又是什么呢?有没有一种方法可以只选择从一个起点到某个终点,然后删除其中的所有内容。
发布于 2012-07-26 22:04:39
好的-我找到了一个简单的解决方案,使用了定义从起点到其他范围的终点的能力。但是由于Ranges的位置非常不稳定(特别是在混合文本和表格时),可以使用辅助书签来定义起始点。
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 Subhttps://stackoverflow.com/questions/11666114
复制相似问题