目录
一、难点分析
1.数组的应用
比如,输入多个区间【1,5-10,21-28】,如何循环这些区间。
这里主要是:
(1)将用户输入的需要删除的区间通过split函数用逗号(,)进行分割后存储在一个数组arr中;
(2)从arr的最大下标(最后一个)循环到arr的最小下标(第一个),每次循环的结果通过split函数用“-”分隔,存入数组brr中;
(3)i从brr(1)的值循环到brr(0)的值,删除i对应的页面。
注意:这里需要判断一下,如果arr中的元素本身没有“-”,即分割出的brr中有一个元素brr(0),此时需要让brr(1)也等于brr(0)。否则,brr(1)不存在,会报错。
2.操作顺序
删除尽量从后面向往前面操作,以免出现不必要的错误
二、示例代码
Sub 删除页()
Dim i As Long
Dim j As Long
Dim k As Long
Dim pg As Range
Dim arr, brr
Dim prmt As String
On Error GoTo err1
Application.ScreenUpdating = False
prmt = "请输入需要各部分删除的页码范围(页码从小到大,且每部分不能重叠)," & vbCrLf & _
"每部分首尾用【-】连接,各部分之间用逗号分隔,如:" & vbCrLf & _
"1-5,10-20,95-100"
arr = Split(Replace(Trim(InputBox(prmt, "删除范围", "1-5,10-20")), ",", Chr(44)), Chr(44))
For i = UBound(arr) To LBound(arr) Step -1
brr = Split(arr(i), "-")
If LBound(brr) = UBound(brr) Then
ReDim Preserve brr(1)
brr(1) = brr(0)
End If
For j = Val(brr(1)) To Val(brr(0)) Step -1
Set pg = Selection.GoTo(wdGoToPage, wdGoToAbsolute, j)
With pg
.Select
.SetRange pg.Start, pg.Bookmarks("\page").End
.Delete
k = k + 1
End With
Next
Next
Application.ScreenUpdating = True
Set pg = Nothing
MsgBox Format(k, "完成 共删除了0页")
Exit Sub
err1:
MsgBox Err.Description
End Sub
三、操作图示
1.复制代码-运行
2.输入要删除的页码范围
根据提示输入要删除的页码范围,要求:
请输入需要各部分删除的页码范围(页码从小到大,且每部分不能重叠),每部分首尾用【-】连接,各部分之间用逗号分隔,如: "1-5,10-20,95-100";
中间的引号、逗号都用半角符号(英文标点)。
3.操作完成
可以看到,刚刚用户填写的【67-78,80-81】页已经正确删除。