Vba word удалить разрыв страницы

Обновлено: 07.07.2024

Здравствуйте.
В документе около 500 страниц. Каждая страница заканчивается разрывом раздела. Вы не могли бы подсказать макрос для замены разрывов раздела на другой знак (например, на знак абзаца) во всем файле?

Пробовал с помощью

2 Ответ от genmon 25.07.2017 15:12:12

.
Пробовал с помощью "Найти и заменить" (^b заменить на ^p), но почему-то заменяются не все разрывы раздела (именно разрывы раздела, а не разрывы страницы). Некоторые разрывы раздела остаются. При этом если я ищу вручную разрывы раздела (нажимаю "найти далее" в окне "найти и заменить", то очередной разрыв раздел отыскивается, но когда нажимаю на кнопку "заменить", разрыв раздела остаётся)

3 Ответ от shanemac51 08.02.2018 10:59:36

4 Ответ от shanemac51 08.02.2018 11:00:45

возможно это разрыв на текущей странице(например при колонках на листе)

5 Ответ от azur 03.07.2019 07:42:36

Новую тему не стал создавать, ибо проблема почти такая же.
Слияние идёт их экселя в ворд в поля, расположенные в ячейках таблицы.
Как великому неудобству, каждая таблица создаётся на новой странице. И под каждой таблицей располагается:

=====Разрыв раздела (со следующей страницы)=====

(см. файлы примера в прицепе. В файле 4 страницы, по таблице на каждой странице; разрывов раздела, соответственно, всего три: между 1/2, 2/3, 3/4 страницами).
Как автоматизировать удаление разрыва раздела?
--------------------
После замены ^b удаляется только разрыв 3/4. И то - на самом деле остаётся, но только как бы зажимается между 3 и 4 таблицами.

1. С разрывом раздела.docx 24.41 Кб, 1 скачиваний с 2019-07-03

You don't have the permssions to download the attachments of this post.

6 Ответ от yshindin 03.07.2019 10:14:38

. . .
После замены ^b удаляется только разрыв 3/4. И то - на самом деле остаётся, но только как бы зажимается между 3 и 4 таблицами.
. . .

В вашем документе в конце таблиц какой-то разделительный символ, по нажатии на который клавишей <Del> соседние таблицы объединяются. Вот с помощью этого макроса я в конце каждой таблицы убираю этот символ, а затем вставляю разрыв столбца:

7 Ответ от azur 05.07.2019 01:46:15

Спасибо! Работает .
==========

8 Ответ от azur 05.07.2019 01:51:47

"какой-то разделительный символ" - вот он и генерируется (видимо) во время слияния и указан как Разрыв раздела.

Я для других целей делал другой документ, тоже с шаблоном слияния. И из-за этого какого-то_символа пришлось делать шаблон без таблицы.
Разрывы раздела генерировались, НО все эти разрывы без проблем удалялись через "Найти ^b и заменить". А вот если присутствует таблица в шаблоне слияния, то находится и удаляется только последний разрыв в файле результата слияния.
--------------
Мммм. Можете подсобить с удалением всех пустых строк в таблицах? Т.е. во всех таблицах документа найти полностью пустые строки и удалить их. /// Или это уже другая тема?

9 Ответ от yshindin 05.07.2019 10:35:48

. . .
Мммм. Можете подсобить с удалением всех пустых строк в таблицах? Т.е. во всех таблицах документа найти полностью пустые строки и удалить их. /// Или это уже другая тема?
. . .

Наверное, другая тема. В ваших таблицах есть объединенные ячейки, поэтому Word не разрешает в подобных таблицах доступ к отдельным строкам как объектам (напр., с целью удаления). Если бы таблица была консистентной, то удаление строк целиком было бы возможным.
Нет времени возиться с такой таблицей. Это может выглядеть, напр., так: перебирать все ячейки таблицы, определяя номер строки и столбца (через vbInformation). Затем в цикле следить, произошла ли смена строки и заодно содержали ли все ли ячейки последней строки какие-то данные. Если таким образом выясняется, что строка была пустой, то попытаться по ячейкам, начиная с первой ячейки строки, удалить эту строку. Правда, при этом можно нарваться на многочисленные риски с получением кривой таблицы.
Можно попытаться применить и какой-то другой подход.

10 Ответ от azur 08.07.2019 01:21:29

Спасибо. (( Мда.
На просторах нашёл макрос:

. но он (в моём документе) удаляет пустые строки, которые пустые не полностью, а начиная со 2 столбца (а такие строки нужны). Можно что-то подкрутить, чтобы удалял только полностью пустые?

11 Ответ от azur 08.07.2019 01:45:40

Стоп! Не тот модуль скопировал.. Это ваш код
Вот правильный:

12 Ответ от yshindin 08.07.2019 10:19:59

Стоп! Не тот модуль скопировал.. Это ваш код
Вот правильный:

Я уже вам отвечал, что у вас таблицы с объединенными ячейками, поэтому операции вроде

для ваших таблиц не могут быть выполнены даже если удаляемая строка вся из пустых ячеек.

13 Ответ от yshindin 08.07.2019 10:55:04

. . .
Я уже вам отвечал, что у вас таблицы с объединенными ячейками, поэтому операции вроде

для ваших таблиц не могут быть выполнены даже если удаляемая строка вся из пустых ячеек.
. . .

У меня есть следующий код, который я нашел, когда гуглил проблему. Проблема с этим кодом состоит в том, что он перезаписывает заголовок следующего за последним раздела (и нижний колонтитул, хотя мне нужен только сохраненный заголовок) на заголовок последнего раздела, что является стандартным (странным) поведением Word.

Есть ли обходной путь к этому в VBA?

Вот код, который имеет внутреннюю ошибку:

Примечание. Весь диапазон последнего раздела удаляется кодом, и это является обязательным поведением. Проблема, связанная с поведением Word по умолчанию, - это то, что мне нужно для обхода кода VBA. Можно избежать сложных ручных процедур, чтобы избежать этого, но мне нужен был простой подход в коде.

3 ответа

Глядя больше на это самостоятельно (мне пришлось решать проблему в короткие сроки, и я не мог ждать), я пришел к тому же выводу, который был отмечен в комментарии @CindyMeister, что при удалении последнего «разрыва раздела» на самом деле следующий за последним раздел удаляется, и то, какие данные и форматирование ранее принадлежали последнему разделу, очевидно наследуется последним разделом new (т. е. более ранним следующим последний раздел). Но в действительности последний раздел остался, и был удален только разрыв раздела, поэтому был удален следующий за последним раздел (и фактические страницы из последнего раздела).

Я обнаружил, что свойство LinkToPrevious объекта HeaderFooter позволяет упрощенным способом «наследовать» настройки из предыдущего раздела.

Таким образом, добавив несколько строк, чтобы установить для этого свойства значение true в каждом экземпляре, а затем изменив его обратно на false , я могу получить требуемое поведение следующего за последним раздела, оставаясь таким же, как и раньше ,

(Обратите внимание, что это сработало для меня, потому что у меня просто был другой текст в первичном заголовке, и у меня не было специального форматирования и т. Д. Но я подозреваю, что, исходя из работы свойства LinkToPrevious , это панацея. прокомментируйте, если не так.)

Это строки для установки свойства:

Полный рабочий код для потомства:

Проблема здесь заключается в том, что разрыв раздела несет информацию раздела. Если вы удалите его, последний раздел станет частью предыдущего раздела. Уловка, которую я использую ниже, состоит в том, чтобы создать непрерывный разрыв раздела вместо разрыва страницы, а затем сделать все остальное:

Обычно удаление разрыва раздела приводит к тому, что раздел, предшествующий разрыву, принимает макет страницы следующего раздела. Следующий макрос работает по-другому, через несколько (выбранных) разрывов разделов. Все распространенные проблемы макета страницы (поля, ориентация страницы, текстовые столбцы, верхние и нижние колонтитулы) устранены. Как вы можете видеть, изучая код, нетрудно сделать все эти вещи.

Читайте также: