Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
18.04.2024, 07:12:10

Войти
Название темы должно отражать её содержание.
Темы типа "ПОМОГИТЕ!!!", "Срочно!", "Не получается сделать", "Нужна помощь" и т.п. будут удаляться без объяснения причин
33 240 Сообщений в 5 456 Тем от 6 757 Пользователей
Последний пользователь: kkmark
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
  Просмотр сообщений
Страниц: [1]
1  Основные форумы / Вопросы по Word и VBA / Re:Удаление страниц с разрывами разделов и без разрывов разделов : 22.09.2019, 08:14:59
дабы не вводить в заблуждение - сорри - имеется всегда в виду разрыв раздела а не разрыв страницы
2  Основные форумы / Вопросы по Word и VBA / Re:Удаление страниц с разрывами разделов и без разрывов разделов : 21.09.2019, 12:42:39
или иначе по логике:
в общем по моей логике
1)убить диапазон до начала 1 разрыва
2)сохранить разрыв и далее начать удаление с конца разрыва
3)убить все до последней страницы диапазона (если последняя страница диапазона имеет разрыв - и его убить)

тогда все корректно проходит
3  Основные форумы / Вопросы по Word и VBA / Re:Удаление страниц с разрывами разделов и без разрывов разделов : 21.09.2019, 10:48:19
такто как понимаю щас можно проще сделать -удалить сразу всю область диапазона страниц и вставить в это место разрыв страницы.
допустим удаляем диапазон
Код: (vb)

Sub Удаление()
Dim nStart As Long, nEnd As Long
Application.ScreenUpdating = False
If TextBox1.Value <> "" And TextBox2.Value <> "" Then
  With Selection
    'Переход к началу первой страницы удаления
.GoTo wdGoToPage, wdGoToAbsolute, TextBox1.Value
    'Запоминаем положение
    nStart = .Start
    'Переход к началу следующей страницы после последней страницы удаления
    .GoTo wdGoToPage, wdGoToAbsolute, TextBox2.Value + 1
    'Запоминаем положение
    nEnd = .Start
    'Выделяем
    .SetRange nStart, nEnd
    'Удаляем
    .Delete
  End With
  
Else
Exit Sub
End If
Application.ScreenUpdating = True

End Sub



и как далее корректно вставить разрыв раздела на следующую страницу  в конец предыдущей страницы - перед первой на удаление ??
4  Основные форумы / Вопросы по Word и VBA / Удаление страниц с разрывами разделов и без разрывов разделов : 20.09.2019, 09:22:29
Добрый день всем !

В общем создал форму для удаления страниц в Word
Однако не могу корректно удалить страницы в диапазоне по условию:
а нужно именно так

1)Имеем диапазон страниц с TextBox1 до TextBox2 для удаления
2)Определяем количество разрывов страниц в диапазоне (например их будет 5)
3)Удаляем все до 1 разрыва страницы и сохраняем 1 разрыв страницы (применяется Макрос2 для удаления)
4)Далее после 1 разрыва страницы удаляем все содержимое и все разрывы 2,3,4,5 (применяется Макрос1 для удаления)

Код макроса
Код: (vb)

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 както этот цикл сделать ?
5  Основные форумы / Вопросы по Word и VBA / Re:WORD Удалить фигуру из верхнего колонтитула : 12.09.2019, 14:46:48
Сорри увлекся - понятно  Более не повторится
6  Основные форумы / Вопросы по Word и VBA / Re:WORD Удалить фигуру из верхнего колонтитула : 12.09.2019, 13:55:48
удалить все содержимое последней страницы
курсор на предыдущую страницу

вроде работает - нашел в инете допилил
Код: (vb)

Dim ActivePages As Long
ActivePages = Selection.Information(wdActiveEndPageNumber) 'определяем номер страницы с курсором

Dim PageNumber1 As Long, PageNumber2 As Long
    Dim start_ As Long, end_ As Long
  
  
    '1. Здесь запишите в переменные номера страниц, которые нужно выделить.
'    PageNumber1 = InputBox("Номер начальной страницы:")
'    PageNumber2 = InputBox("Номер конечной страницы:")
    PageNumber1 = ActivePages
    PageNumber2 = ActivePages
    
    
  
'    '2. Проверка, что указанная начальная страница существует.
'    If ActiveDocument.ComputeStatistics(wdStatisticPages) < PageNumber1 Then
'        MsgBox "В файле нет указанной начальной страницы.", vbExclamation
'        Exit Sub
'    End If
'
'    '3. Проверка, что указанная конечная страница существует.
'    If ActiveDocument.ComputeStatistics(wdStatisticPages) < PageNumber2 Then
'        MsgBox "В файле нет указанной конечной страницы.", vbExclamation
'        Exit Sub
'    End If
  
    '4. Запись в переменную начала начальной страницы.
    start_ = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=PageNumber1).Start
  
    '5. Запись в переменную конца конечной страницы.
        ' Нужно в переменную записать начало следующей страницы после указанной конечной.
        ' Если конечная страница - это последняя страница, то запишем в переменную конец файла.
    If ActiveDocument.ComputeStatistics(wdStatisticPages) = PageNumber2 Then
        end_ = ActiveDocument.Range.End
    Else
        end_ = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=PageNumber2 + 1).Start
    End If
  
    '6. Выделение указанных страниц.
    ActiveDocument.Range(start_, end_).Select
    Selection.Delete Unit:=wdCharacter, Count:=1
    
    start_ = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=PageNumber1 - 1).Start
    end_ = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=PageNumber2 - 1).Start
    ActiveDocument.Range(start_, end_).Select


теперь после удаления содержимого колонтитулов и содержимого последней страницы
перешел на предыдущую страницу - внизу осталась пустая последняя страница

как сейчас на этой странице заменить "Разрыв раздела на следующей странице" заменить на другой "Разрыв раздела на текущей странице" ?
7  Основные форумы / Вопросы по Word и VBA / Re:WORD Удалить фигуру из верхнего колонтитула : 12.09.2019, 12:15:08
На самом деле сделал форму с кнопками  - удалить активный лист
Код: (vb)

Selection.GoTo wdGoToPage, wdGoToAbsolute, ActivePages
Selection.Bookmarks("\page").Range.Delete


этот код удаляет удаляет активные листы
но засада с последней страницей - тк она этим кодом не удаляется

вот и иду последовательно -
удалить все в колонтитуле последней страницы
удалить все содержимое последней страницы
курсор на предыдущую страницу

тогда думаю последняя страница исчезнет
плюс еще надо будет поменять Разрыв раздела на следующей странице
поменять на Разрыв раздела на текущей странице на предыдущей странице
иначе пустой лист в конце будет вылазить
8  Основные форумы / Вопросы по Word и VBA / Re:WORD Удалить фигуру из верхнего колонтитула : 12.09.2019, 10:59:14
У меня верхние колонтитулы только для того чтобы вставлять фигуры - рамки чертежные
страницы поделены разделами - на каждой странице разная фигура в верхнем колонтитуле
если я удаляю фигуру на определенной странице в колонтитуле - это никак не влияет на другие колонтитулы
както так думаю

9  Основные форумы / Вопросы по Word и VBA / Re:WORD Удалить фигуру из верхнего колонтитула : 12.09.2019, 10:18:34
Почему нельзя - страницы же разделами разделены ?
ошибка у меня к сожалению вылезла на вашем последнем варианте

на строке
D.Sections(N).Headers(1).Range.Select

пишет
Run-time error 5941
Запрашиваемый номер семейства не существует
10  Основные форумы / Вопросы по Word и VBA / Re:WORD Удалить фигуру из верхнего колонтитула : 12.09.2019, 09:43:04
файл долго правил - сорри

к сожалению ваш макрос почемуто не удаляет фигуру в верхнем колонтитуле на последнем листе Грустный
11  Основные форумы / Вопросы по Word и VBA / Re:WORD Удалить фигуру из верхнего колонтитула : 12.09.2019, 09:20:34
Страницы поделены на разделы
В верхнем колонтитуле каждой страницы одна сгруппированная фигура
Положение - перед текстом

И именно на последней странице надо удалить фигуру в верхнем колонтитуле

Сейчас попробую упрощенный пример сделать - файл большой просто со множеством страниц

12  Основные форумы / Вопросы по Word и VBA / WORD Удалить фигуру из верхнего колонтитула : 12.09.2019, 09:05:48
Доброго дня всем !

задача получилась непростая
Нужно из верхнего колонтитула последней страницы
удалить фигуру

Макрорекодер выдал следущее:
Код: (vb)

'открываем колонтитулы
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
'выделяем фигуру
Selection.HeaderFooter.Shapes("Group 851").Select
'вырезаем
Selection.Cut


но дело в том что имя фигур будет менятся на последнем листе - как то надо
добраться до последнего листа и удалить имеющуяся в врхнем колонтитуле фигуру

на просторах инета раскопал макрос
Добраться до последнего листа листа можно
но как удалить фигуру ?

Код: (vb)

Dim D As Word.Document
Dim R As Word.Range
Dim F As Word.HeaderFooter
Dim N As Long
    
    ' документ
    Set D = ActiveDocument ' заменить вашим
    ' всего страниц
    N = D.Range.Information(Type:=Word.wdActiveEndPageNumber)
    ' начало последней страницы
    Set R = D.GoTo(What:=Word.wdGoToPage, _
                   Which:=Word.wdGoToAbsolute, _
                   Count:=N)
    ' перебираем верхние колонтитулы
'    For Each F In D.Range.Sections.Last.Footers
    For Each F In D.Range.Sections.First.Footers
        F.LinkToPrevious = False ' отсоединяем
        F.Range.Delete ' очищаем - не сработало не удалило фигуру
'        F.Shapes.Cut ' очищаем - не сработало
    Next F
Страниц: [1]
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru