oleg4226
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 12
|
|
« : 12.09.2019, 09:05:48 » |
|
Доброго дня всем ! задача получилась непростая Нужно из верхнего колонтитула последней страницы удалить фигуру Макрорекодер выдал следущее: 'открываем колонтитулы ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader 'выделяем фигуру Selection.HeaderFooter.Shapes("Group 851").Select 'вырезаем Selection.Cut
но дело в том что имя фигур будет менятся на последнем листе - как то надо добраться до последнего листа и удалить имеющуяся в врхнем колонтитуле фигуру на просторах инета раскопал макрос Добраться до последнего листа листа можно но как удалить фигуру ? 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
|
|
|
Записан
|
|
|
|
|
oleg4226
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 12
|
|
« Ответ #2 : 12.09.2019, 09:20:34 » |
|
Страницы поделены на разделы В верхнем колонтитуле каждой страницы одна сгруппированная фигура Положение - перед текстом
И именно на последней странице надо удалить фигуру в верхнем колонтитуле
Сейчас попробую упрощенный пример сделать - файл большой просто со множеством страниц
|
|
|
Записан
|
|
|
|
|
Дмитрий Щербаков(The_Prist)
|
|
« Ответ #4 : 12.09.2019, 09:38:18 » |
|
Ну в общем сами разберетесь что там у Вас как. Но. Ваши ошибки в коде: 1. Footers - это нижний колонтитул, а не верхний. 2. В колонтитулах как правило InlineShapes, к которому напрямую обратиться нельзя, значит надо использовать Selection 3. В итоге должно получиться что-то вроде: 'чтобы обращаться к Selection надо перейти в колонтитул Application.Selection.WholeStory Application.Browser.Next D.Windows(1).ActivePane.View.SeekView = wdSeekCurrentPageHeader For Each F In D.Range.Sections.First.Headers F.Range.Start = 1 F.Range.End = F.Range.Characters.Count If Selection.InlineShapes.Count > 0 Then Selection.InlineShapes(Selection.InlineShapes.Count).Delete End If Next F 'возвращаем вид редактирования документа, а не колонтитула D.Windows(1).ActivePane.View.SeekView = 0
Удаляет последнюю картинку или единственную.
|
|
« Последнее редактирование: 12.09.2019, 09:40:20 от Дмитрий Щербаков(The_Prist) »
|
Записан
|
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы... Пункты приёма Спасибов: -41001332272872 -R298726502453
|
|
|
oleg4226
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 12
|
|
« Ответ #5 : 12.09.2019, 09:43:04 » |
|
файл долго правил - сорри к сожалению ваш макрос почемуто не удаляет фигуру в верхнем колонтитуле на последнем листе
|
|
« Последнее редактирование: 12.09.2019, 10:08:31 от oleg4226 »
|
Записан
|
|
|
|
|
oleg4226
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 12
|
|
« Ответ #7 : 12.09.2019, 10:18:34 » |
|
Почему нельзя - страницы же разделами разделены ? ошибка у меня к сожалению вылезла на вашем последнем варианте
на строке D.Sections(N).Headers(1).Range.Select
пишет Run-time error 5941 Запрашиваемый номер семейства не существует
|
|
|
Записан
|
|
|
|
Дмитрий Щербаков(The_Prist)
|
|
« Ответ #8 : 12.09.2019, 10:39:57 » |
|
У меня на Вашем же примере все работает. Посмотрите чему равно D.Sections.Count и что в N попадает. Ну и убедитесь, что на момент запуска активен правильный документ - может в активном документе нет верхнего колонтитула. Почему нельзя - страницы же разделами разделены ? И что? Раздел и колонтитул - это разные вещи. Колонтитул создается для документа в целом, а не для каждого раздела в отдельности. Еще раз повторю вопрос: получилось у Вас вручную изменить колонтитул ТОЛЬКО НА ОДНОЙ странице так, чтобы колонтитулы на других страницах при этом не изменились?
|
|
« Последнее редактирование: 12.09.2019, 10:42:06 от Дмитрий Щербаков(The_Prist) »
|
Записан
|
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы... Пункты приёма Спасибов: -41001332272872 -R298726502453
|
|
|
oleg4226
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 12
|
|
« Ответ #9 : 12.09.2019, 10:59:14 » |
|
У меня верхние колонтитулы только для того чтобы вставлять фигуры - рамки чертежные страницы поделены разделами - на каждой странице разная фигура в верхнем колонтитуле если я удаляю фигуру на определенной странице в колонтитуле - это никак не влияет на другие колонтитулы както так думаю
|
|
|
Записан
|
|
|
|
|
|
|
oleg4226
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 12
|
|
« Ответ #13 : 12.09.2019, 12:15:08 » |
|
На самом деле сделал форму с кнопками - удалить активный лист Selection.GoTo wdGoToPage, wdGoToAbsolute, ActivePages Selection.Bookmarks("\page").Range.Delete
этот код удаляет удаляет активные листы но засада с последней страницей - тк она этим кодом не удаляется вот и иду последовательно - удалить все в колонтитуле последней страницы удалить все содержимое последней страницы курсор на предыдущую страницу тогда думаю последняя страница исчезнет плюс еще надо будет поменять Разрыв раздела на следующей странице поменять на Разрыв раздела на текущей странице на предыдущей странице иначе пустой лист в конце будет вылазить
|
|
« Последнее редактирование: 12.09.2019, 12:19:38 от oleg4226 »
|
Записан
|
|
|
|
oleg4226
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 12
|
|
« Ответ #14 : 12.09.2019, 13:55:48 » |
|
удалить все содержимое последней страницы курсор на предыдущую страницу вроде работает - нашел в инете допилил 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
теперь после удаления содержимого колонтитулов и содержимого последней страницы перешел на предыдущую страницу - внизу осталась пустая последняя страница как сейчас на этой странице заменить "Разрыв раздела на следующей странице" заменить на другой "Разрыв раздела на текущей странице" ?
|
|
« Последнее редактирование: 12.09.2019, 14:02:32 от oleg4226 »
|
Записан
|
|
|
|
|
oleg4226
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 12
|
|
« Ответ #16 : 12.09.2019, 14:46:48 » |
|
Сорри увлекся - понятно Более не повторится
|
|
|
Записан
|
|
|
|
qtix
|
|
« Ответ #17 : 25.03.2020, 17:17:53 » |
|
У Вас последний колонтитул отдельно от остальных, что ли? Нет же такого понятия - колонтитул для каждой отдельной страницы. У Вас руками получается удалить фигуру в колонтитуле только последней страницы так, чтобы на остальных эта фигура осталась?
|
|
« Последнее редактирование: 25.03.2020, 17:49:57 от Дмитрий Щербаков(The_Prist) »
|
Записан
|
|
|
|
Zefir
|
|
« Ответ #18 : 19.09.2020, 14:09:23 » |
|
Где была эта статья когда я учился сколько боли было с этими колонтитулами ....
|
|
|
Записан
|
|
|
|
|