Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Удаление страниц с разрывами разделов и без разрывов раздело - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Удаление страниц с разрывами разделов и без разрывов раздело
oleg4226 Дата: Пятница, 20.09.2019, 10:28 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Добрый день всем !

В общем создал форму для удаления страниц в 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 както этот цикл сделать ?
Или както проще все можно сделать ?
К сообщению приложен файл: 7844024.zip (28.9 Kb)
 
Ответить
СообщениеДобрый день всем !

В общем создал форму для удаления страниц в 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
Дата добавления - 20.09.2019 в 10:28
oleg4226 Дата: Суббота, 21.09.2019, 12:40 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
в общем по моей логике
1)убить диапазон до начала 1 разрыва
2)сохранить разрыв и далее начать удаление с конца разрыва
3)убить все до последней страницы диапазона (если последняя страница диапазона имеет разрыв - и его убить)
дабы не вводить в заблуждение - сорри - имеется всегда в виду разрыв раздела а не разрыв страницы


Сообщение отредактировал oleg4226 - Воскресенье, 22.09.2019, 08:15
 
Ответить
Сообщениев общем по моей логике
1)убить диапазон до начала 1 разрыва
2)сохранить разрыв и далее начать удаление с конца разрыва
3)убить все до последней страницы диапазона (если последняя страница диапазона имеет разрыв - и его убить)
дабы не вводить в заблуждение - сорри - имеется всегда в виду разрыв раздела а не разрыв страницы

Автор - oleg4226
Дата добавления - 21.09.2019 в 12:40
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!