Добрый день всем !
В общем создал форму для удаления страниц в Word
Однако не могу корректно удалить страницы в диапазоне по условию:
а нужно именно так
1)Имеем диапазон страниц с TextBox1 до TextBox2 для удаления
2)Определяем количество разрывов страниц в диапазоне (например их будет 5)
3)Удаляем все до 1 разрыва страницы и сохраняем 1 разрыв страницы (применяется Макрос2 для удаления)
4)Далее после 1 разрыва страницы удаляем все содержимое и все разрывы 2,3,4,5 (применяется Макрос1 для удаления)
Код макроса
Sub ЗапускФормы()
UserForm1.Show 0
End Sub
Sub УдалениеСтраницНомера()'макрос в самой форме
Dim NumPages As Long
NumPages = ActiveDocument.ComputeStatistics(wdStatisticPages)
'проверка на корректные номера страниц
If TextBox1.Value <> "" And TextBox2.Value <> "" And (TextBox1.Value > NumPages Or TextBox2.Value > NumPages) Then
MsgBox "Вы ввели некорректные номера страниц больше чем в документе !"
Exit Sub
End If
'проверка на заполнение номеров страниц
If TextBox1.Value = "" Or TextBox2.Value = "" Then
MsgBox "Вы не заполнили номера страниц !"
Exit Sub
End If
'Запрет на удаление первой страницы
If TextBox1.Value < 2 Or TextBox2.Value < 2 Then
MsgBox "Нельзя удалять первую страницу !"
Exit Sub
End If
'проверка на правильную последовательность страниц
If TextBox1.Value > TextBox2.Value Then
MsgBox "Проверьте последовательность введения страниц ! Значение Поле 1 не должно быть выше значения Поле 2 ! "
Exit Sub
End If
'предмет вопроса по условию наличия разрыва раздела
If TextBox1.Value < NumPages And TextBox2.Value < NumPages Then 'пока последний лист не трогаем
'Перебор листов в цикле в диапазоне TextBox1.Value и TextBox2.Value для подсчета разрывов разделов
'Удаляем все до 1(первого) разрыва раздела - применяем Макрос2
'Выделяем все ПОСЛЕ первого разрыва раздела и удаляем все - применяем Макрос1
End If
Sub Макрос1 ()'удалить лист без разрыва раздела
Dim start_ As Long, end_ As Long, i As Long
'4. Запись в переменную начала начальной страницы.
start_ = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:= i).Start
'5. Запись в переменную конца конечной страницы.
' Нужно в переменную записать начало следующей страницы после указанной конечной.
' Если конечная страница - это последняя страница, то запишем в переменную конец файла.
If ActiveDocument.ComputeStatistics(wdStatisticPages) = i Then
end_ = ActiveDocument.Range.End
Else
end_ = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:= i + 1).Start
End If
'6. Выделение и удаление указанных страниц.
ActiveDocument.Range(start_, end_).Select
Selection.Delete
End Sub
Sub Макрос2 () 'удалить лист c разрывом раздела
Dim start_ As Long, end_ As Long, i As Long
'4. Запись в переменную начала начальной страницы.
start_ = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:= i).Start
'5. Запись в переменную конца конечной страницы.
' Нужно в переменную записать начало следующей страницы после указанной конечной.
' Если конечная страница - это последняя страница, то запишем в переменную конец файла.
If ActiveDocument.ComputeStatistics(wdStatisticPages) = i Then
end_ = ActiveDocument.Range.End
Else
end_ = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:= i + 1).Start
End If
'6. Выделение указанных страниц.
ActiveDocument.Range(start_, end_).Select
'7.Сжимаем выделение, если последний _
или предпоследний символ это разрыв
With Selection
If Asc(.Characters.Last) = 12 Then
.MoveLeft wdCharacter, 1, wdExtend
End If
If Asc(.Characters.Last.Previous.Text) = 12 Then
.MoveLeft wdCharacter, 2, wdExtend
End If
End With
'8.Удаляем
Selection.Delete
End Sub
Макрос1 и Макрос2 предполагают действия с конкретной страницей,
и действия с переменной i , где i - номер страницы в цикле
Можно ли в Word както этот цикл сделать ?