Статьи из блога
Удаление конечных знаков абзацев из ячеек таблиц
Юрий интересуется:
Как во всем документе удалить лишние концевые знаки абзацев в конце ячеек таблиц? Это именно знаки абзацев (^13) перед маркером конца ячейки. Вариант искать "(*^13)@", заменить на "\1" не работает в ячейках...
Для этих целей следует использовать следующий макрос. Работает для всех таблиц в документе и удаляет знаки абзацев только в конце текста в ячейке:
Sub TablesRemovePilcrons() Dim oTbl As Table Dim oCll As Cell For Each oTbl In ActiveDocument.Tables For Each oCll In oTbl.Range.Cells While oCll.Range.Characters.Last.Previous = Chr(13) oCll.Range.Characters.Last.Previous = "" Wend Next Next
Рубрика: Вопрос-Ответ, Макросы, Таблицы Word
Метки: макросы | таблицы | форматирование
Просмотров: 45074
Подписаться на комментарии по RSS
Версия для печати
Метки: макросы | таблицы | форматирование
Просмотров: 45074
Подписаться на комментарии по RSS
Версия для печати
Еще записи по вопросам использования Microsoft Word:
- 10 вопросов и ответов по редактору Word (1 часть)
- 3 способа очистки списка недавно открытых документов
- Word 2007: добавляем свою вкладку и свои команды
- Word 2007: полотно, рисунки, линии
- Word 2007: смена формата сохранения файла
- Word 97 - решение проблемы с отображением символов на линейке
- Абзац с цветным фоном
- Автоматизация текстового набора в Word
- Автоматическая запись макроса
- Автоматическая нумерация билетов
- Автоматическая расстановка переносов
- Автоматическое обновление полей при открытии документа
- Автоматическое сохранение документа при его закрытии
- Автотекст с последовательной нумерацией
- Белый текст на синем фоне в Word 2007
- Быстрая смена ориентации страниц документа
- Быстрое перемещение между открытыми документами Word
- Быстрое создание нового документа на основе шаблона
- Быстрое удаление границ у таблицы
- Быстрый ввод текста с помощью команды =rand()
- Ввод повторяющихся фрагментов текста в Word 2007
- Ввод часто повторяющихся фрагментов текста
- Вертикальное выравнивание текста
- Возможно ли запретить копирование текста из документа Word?
- Вопрос о работе с графиками (диаграммами) в Word
Комментариев: 15
Приветствую!
У меня похожая проблема:
Необходимо, чтобы в любом названии таблицы (это абзац, непосредственно предшествующий таблице) в конце не было точки.
Вариант:
- находит точки, которые нужно удалить, но не хочет их заменять.
Думаю, задачу можно как-то решить с использованием коллекции Tables, но можно ли решить проблему, используя "Найти и заменить"?
Владислав, скорее всего название таблицы представляет собой поле (автоназвание). Поэтому изменить его с помощью макроса или через диалоговое окно "Найти и заменить" не удасться. Необходимо сначала преобразовать такие поля в текст, а только потом уже заменять. Другого способа я не вижу.
Нет, Название таблицы не является полем.
Проблему удалось решить, если не использовать Replace, а удалять точку вручную следующим образом:
Пишу для того, если вдруг кто-то столкнётся с подобноу проблемой
Ну, если это не поле, тогда все проще, конечно. Правда, ваш макрос может удалить и все другие точки, после которых идет знак абзаца. Это может быть лишним. Надо более конкретно указывать искомый текст. И лучше не использовать в макросе этот код (0013), а использовать Chr(13).
Обнаружилась проблемма с данным макросом.
если первая ячейка таблици пуста — вылетает с ошибкой.
Я решил это (добавив еще и удаление начальных знаков абзаца), но не уверен что это оптимальное решение, VB вижу сегодня первый день. Знатоки — подскажите.
Вдогонку, на сколько эффективней по скорости будет замена
If Len(oCll.Range.Characters.First) = 1 Then
на
If oCll.Range.Characters.Count > 1 Then
Чисто теоретически первый вариант быстрее, потому что проверяется только один символ, а во втором — нужно посчитать количество символов, что, естественно, медленнее.
Но это два разных условия. Первое условие бессмысленное. В ячейке всегда будет хоть один символ (маркер конца ячейки). Длина одного символа всегда равна 1. Т.е. это условие всегда будет давать истину.
Второе условие имеет смысл, но не в этой задаче.
Чтобы не вылетала ошибка, ее нужно поймать, например так:
Это с точки зрения логики бессмысленное, сам бы смеялся когда увидел. Но, если ячейка пуста, длинна первого символа ячейки мистическим образом становится равной 2.
За способ поимки — спасибо.
Никакой мистики. Просто в пустой ячейке есть символ конца ячейки, а перед ним символ абзаца, но он не виден.
Для г-на Корнилова: Уважаемый Евгений, какие точки, какие знаки абзацев? -- Надо начинать с того, что нужно правильно писать слова "таблици", "длинна", "проблемма"! Читать невозможно!
Для всех: Подскажите, как в этот же макрос включить возможность удаления первых (нескольких первых) пробелов в ячейках таблиц? И в каком случае целесообразнее использовать ^0013, а в каком Chr(13)?
Penniwise, обрамляющие пробелы у текста убираются функцией Trim, либо её разновидностями:
1. LTrim, чтобы убрать пробелы только впереди текста;
2. RTrim, чтобы убрать пробелы позади текста.
^0013 используется для поиска знака абзаца при поиске с подстановочными знаками.
Chr(13) это выражение Basic, которое возвращает строковое значение символа номер 13 из таблицы символов. Вместо него можно использовать константу vbCr. Используется, если в тексте нужно перейти на новую строку.
Некоторые word-документы заканчиваются таблицей. При этом зачастую после таблицы висит конечный знак абзаца. Это бывает неудобно, когда этот самый конечный знак абзаца переносится на следующую страницу, делая её последней и в то же время пустой.
Как можно удалить конечный знак абзаца, чтобы документ заканчивался таблицей?
Удалить его нельзя, но можно уменьшить шрифт до одного пункта и тогда абзац полностью поместится на странице под таблицей.
Спасибо. Какое-то время назад так и догадался делать + ещё удаляю у этого абзаца интервалы, но полагал, что можно как-то «умнее» это сделать.
Хм. Интересно, зачем по замыслу разработчиков нужен этот знак абзаца после таблицы?
Очень хороший скрипт, но сегодня он вдруг отказался работать. Пишет Object variable or With block variable not set.
Что нужно поправить?