В общем создал форму для удаления страниц в Word Однако не могу корректно удалить страницы в диапазоне по условию: а нужно именно так
1)Имеем диапазон страниц с TextBox1 до TextBox2 для удаления 2)Определяем количество разрывов страниц в диапазоне (например их будет 5) 3)Удаляем все до 1 разрыва страницы и сохраняем 1 разрыв страницы (применяется Макрос2 для удаления) 4)Далее после 1 разрыва страницы удаляем все содержимое и все разрывы 2,3,4,5 (применяется Макрос1 для удаления)
Код макроса [vba]
Код
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
[/vba]
Макрос1 и Макрос2 предполагают действия с конкретной страницей, и действия с переменной i , где i - номер страницы в цикле Можно ли в Word както этот цикл сделать ? Или както проще все можно сделать ?
Добрый день всем !
В общем создал форму для удаления страниц в Word Однако не могу корректно удалить страницы в диапазоне по условию: а нужно именно так
1)Имеем диапазон страниц с TextBox1 до TextBox2 для удаления 2)Определяем количество разрывов страниц в диапазоне (например их будет 5) 3)Удаляем все до 1 разрыва страницы и сохраняем 1 разрыв страницы (применяется Макрос2 для удаления) 4)Далее после 1 разрыва страницы удаляем все содержимое и все разрывы 2,3,4,5 (применяется Макрос1 для удаления)
Код макроса [vba]
Код
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
[/vba]
Макрос1 и Макрос2 предполагают действия с конкретной страницей, и действия с переменной i , где i - номер страницы в цикле Можно ли в Word както этот цикл сделать ? Или както проще все можно сделать ?oleg4226
в общем по моей логике 1)убить диапазон до начала 1 разрыва 2)сохранить разрыв и далее начать удаление с конца разрыва 3)убить все до последней страницы диапазона (если последняя страница диапазона имеет разрыв - и его убить) дабы не вводить в заблуждение - сорри - имеется всегда в виду разрыв раздела а не разрыв страницы
в общем по моей логике 1)убить диапазон до начала 1 разрыва 2)сохранить разрыв и далее начать удаление с конца разрыва 3)убить все до последней страницы диапазона (если последняя страница диапазона имеет разрыв - и его убить) дабы не вводить в заблуждение - сорри - имеется всегда в виду разрыв раздела а не разрыв страницыoleg4226
Сообщение отредактировал oleg4226 - Воскресенье, 22.09.2019, 08:15