Удалить строку vba word

Обновлено: 04.07.2024

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

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

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

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

3 ответа

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

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

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

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

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

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

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

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

Удалите строки выше с кодами VBA

Здесь я представляю вам два кода VBA: один - удалить строки над активной (выбранной ячейкой), другой - удалить строки над указанным текстом.

1. Выберите ячейку, над которой вы хотите удалить строки, и нажмите Alt + F11 ключи для открытия Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модуль, и вставьте ниже код в Модуль скрипты.

VBA: удалить строки над активной ячейкой

документ удалить строки выше 1

документ удалить строки выше 2

3. Нажмите F5 key, то строки над активной ячейкой были удалены. Смотрите скриншот:

Если вы хотите удалить строки над указанным текстом, вы можете использовать VBA ниже.

VBA: удалить строки над указанным текстом

документ удалить строки выше 3

Примечание:

1. В коде Общая группа это текст, который вы хотите найти, вы можете изменить его по своему усмотрению.

документ удалить строки выше 4

2. Если найденный текст уже был в первой строке, появится диалоговое окно с напоминанием.

документ удалить строки выше 5

3. Если найденный текст не существует на листе, появится диалоговое окно, как показано на скриншоте ниже, чтобы напомнить вам.

Пустые строки и столбцы могут быть головной болью в таблицах во многих случаях. Стандартные функции сортировки, фильтрации, подведения итогов, создания сводных таблиц и т.д. воспринимают пустые строки и столбцы как разрыв таблицы, не подхватывая данные, расположенные за ними далее. Если таких разрывов много, то удалять их вручную может оказаться весьма затратно, а удалить сразу всех "оптом", используя фильтрацию не получится, т.к. фильтр тоже будет «спотыкаться» на разрывах.

Давайте рассмотрим несколько способов решения этой задачи.

Способ 1. Поиск пустых ячеек

Это, может, и не самый удобный, но точно самый простой способ вполне достойный упоминания.

Предположим, что мы имеем дело вот с такой таблицей, содержащей внутри множество пустых строк и столбцов (для наглядности выделены цветом):

Исходные данные

Допустим, мы уверены, что в первом столбце нашей таблицы (колонка B) всегда обязательно присутствует название какого-либо города. Тогда пустые ячейки в этой колонке будут признаком ненужных пустых строк. Чтобы быстро их все удалить делаем следующее:

  1. Выделяем диапазон с городами (B2:B26)
  2. Нажимаем клавишу F5 и затем кнопку Выделить (Go to Special) или выбираем на вкладке Главная - Найти и выделить - Выделить группу ячеек (Home - Find&Select - Go to special) .
  3. В открывшемся окне выбираем опцию Пустые ячейки (Blanks) и жмём ОК – должны выделиться все пустые ячейки в первом столбце нашей таблицы.
  4. Теперь выбираем на вкладке Главная команду Удалить - Удалить строки с листа (Delete - Delete rows) или жмём сочетание клавиш Ctrl + минус - и наша задача решена.

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

Способ 2. Поиск незаполненных строк

Как вы, возможно, уже сообразили, предыдущий способ сработает только в том случае, если в наших данных обязательно присутствую полностью заполненные строки и столбцы, за которые можно зацепиться при поиске пустых ячеек. Но что, если такой уверенности нет, и в данных могут содержаться и пустые ячейки в том числе?

Взгляните, например, на следующую таблицу - как раз такой случай:

Исходные данные с пустыми ячейками

Здесь подход будет чуть похитрее:

    Введём в ячейку A2 функцию СЧЁТЗ (COUNTA) , которая вычислит количество заполненных ячеек в строке правее и скопируем эту формулу вниз на всю таблицу:

Считаем количество заполненных ячеек

К сожалению, со столбцами такой трюк уже не проделать – фильтровать по столбцам Excel пока не научился.

Способ 3. Макрос удаления всех пустых строк и столбцов на листе

Для автоматизации подобной задачи можно использовать и простой макрос. Нажмите сочетание клавиш Alt + F11 или выберите на вкладке Разработчик - Visual Basic (Developer - Visual Basic Editor) . Если вкладки Разработчик не видно, то можно включить ее через Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon) .

В открывшемся окне редактора Visual Basic выберите команду меню Insert - Module и в появившийся пустой модуль скопируйте и вставьте следующие строки:

Закройте редактор и вернитесь в Excel.

Теперь нажмите сочетание Alt + F8 или кнопку Макросы на вкладке Разработчик. В открывшемся окне будут перечислены все доступные вам в данный момент для запуска макросы, в том числе только что созданный макрос DeleteEmpty. Выберите его и нажмите кнопку Выполнить (Run) - все пустые строки и столбцы на листе будут мгновенно удалены.

Способ 4. Запрос Power Query

Ещё один способ решить нашу задачу и весьма частый сценарий - это удаление пустых строк и столбцов в Power Query.

Сначала давайте загрузим нашу таблицу в редактор запросов Power Query. Можно конвертировать её в динамическую "умную" сочетанием клавиш Ctrl+T или же просто выделить наш диапазон данных и дать ему имя (например Данные) в строке формул, преобразовав в именованный:

Присваиваем имя диапазону данных

Теперь используем команду Данные - Получить данные - Из таблицы/диапазона (Data - Get Data - From table/range) и грузим всё в Power Query:

Загруженные в Power Query данные

Дальше всё просто:

  1. Удаляем пустые строки командой Главная - Сократить строки - Удалить строки - Удалить пустые строки (Home - Remove Rows - Remove empty rows).
  2. Щёлкаем правой кнопкой мыши по заголовку первого столбца Город и выбираем в контекстном меню команду Отменить свёртывание других столбцов (Unpivot Other Columns). Наша таблица будет, как это технически правильно называется, нормализована - преобразована в три столбца: город, месяц и значение с пересечения города и месяца из исходной таблицы. Особенность этой операции в Power Query в том, что она пропускает в исходных данных пустые ячейки, что нам и требуется:

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