Макрослово удаляет пустые строки таблицы

Обновлено: 04.07.2024

Я надеюсь, что кто-то сможет дать мне быстрый ответ на этот вопрос, поскольку я не думаю, что проблема настолько сложна — я просто не вижу решения.

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


Каждая ячейка в первом столбце содержит один маркер — вот и все. Ничего больше.
Каждая ячейка во втором столбце содержит информацию посредством DocVariables, которая может отображать или не отображать значение.

У меня есть код из предыдущего документа, который удаляет строки в таблице, если они пусты.

Application.ScreenUpdating = False
Dim Tbl As Table, cel As Cell, i As Long, n As Long, fEmpty As Boolean
С ActiveDocument
Для каждой Tbl в .Tables
n = Tbl.Rows.Count
For i = n To 1 Шаг -1
fEmpty = True
Для каждой ячейки в Tbl.Rows(i).Cells
If Len(cel.Range.Text) > 2 Then
fEmpty = False
Выход для
End If
Следующий cel
If fEmpty = True Then Tbl.Rows(i ).Удалить
Следующая и
Следующая таблица
Заканчиваться
Установить cel = Ничего: Установить таблицу = Ничего
Application.ScreenUpdating = True

Однако на этот раз это не работает, и я подозреваю, что это из-за маркера.

Есть ли способ настроить мой код так, чтобы он игнорировал начальный столбец и удалял строку, если вместо этого ячейка во втором столбце пуста?

Будет полезна любая помощь.


Sub DeleteEmptyRows()
Dim Tbl As Table, cel As Cell
Dim i As Long, j As Long, n As Long, fEmpty As Boolean
Application.ScreenUpdating = False
С ActiveDocument
Для каждой Tbl в .Tables
n = Tbl.Rows.Count
For i = n To 1 Step -1
fEmpty = True < br />Для j = 2 To Tbl.Rows(i).Cells.Count
Set cel = Tbl.Rows(i).Cells(j)
If Len(cel.Range.Text) > 2 Затем
fEmpty = False
Выход для
Конец Если
Следующий j
Если fEmpty = True Then Tbl.Rows(i).Delete
Следующий i
Следующая таблица
Конец с
Установить cel = Nothing: Установить Tbl = Ничего
Application.ScreenUpdating = True
End Sub

Спасибо за ваше предложение. Я проверил это, и я боюсь, что он не удаляет строки, у меня все еще остаются одна или две строки с маркерами и никакой информации рядом с ними.

Есть другие идеи?

Это должно работать, и работает здесь, если все оставшиеся ячейки в строке пусты — пробел в ячейке заставит его игнорировать строку. Нажмите кнопку � на вкладке «Главная», чтобы отобразить форматирование, или, если вы не можете найти причину, опубликуйте копию таблицы, которая не работает как вложение в документ.

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

Удалить пустые строки и столбцы в таблице Word

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

Ниже приведены 3 метода, которые вы можете использовать.

Способ 1. Удаление пустых строк и столбцов вручную


  1. Сначала выберите пустую строку или столбец.
  2. Затем щелкните правой кнопкой мыши, чтобы открыть контекстное меню. В меню выберите "Удалить строки" или "Удалить столбцы" соответственно.
  3. К сожалению, таким способом нельзя выделить несколько непоследовательных строк или столбцов и удалить их вместе. Для этого вы можете обратиться к нашей предыдущей статье: 5 быстрых методов для пакетного удаления нескольких строк или столбцов в вашей таблице Word

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

    Метод 1 имеет свои ограничения. Поэтому мы предложим вам способ пакетного удаления строк и столбцов в таблице с помощью кодов VBA.

    Через несколько секунд вы удалите все пустые строки и столбцы в этой таблице.

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

    1. Во-первых, повторите шаги метода 2, чтобы установить и запустить макрос.
    2. Только на этот раз замените этот макрос следующим:

    Восстановить поврежденный документ

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


    Махеш Маквана


    Махеш Маквана
    Писатель

    Махеш Маквана — технический писатель-фрилансер, специализирующийся на написании практических руководств. Он пишет технические учебники уже более десяти лет. Он написал для некоторых известных технических сайтов, включая MakeUseOf, MakeTechEasier и Online Tech Tips. Подробнее.

    Логотип Microsoft Word на синем фоне

    Вручную удалять лишние пустые строки из документа Microsoft Word утомительно. К счастью, встроенная в Word функция может удалить все пустые строки сразу. Вот как это сделать.

    Как работают пустые строки в Microsoft Word

    Microsoft Word добавляет скрытый тег (так называемый «тег абзаца») в конец каждой строки всякий раз, когда вы нажимаете Enter. Вы можете увидеть эти теги в своем документе, щелкнув значок абзаца (который выглядит как перевернутая буква «P» с двумя линиями) на вкладке «Главная» в Word.

    Теги абзаца в документе Word

    Используя функцию «Найти и заменить» в Word, вы можете заменить теги двойных абзацев одним тегом. Это удалит лишние пустые строки из вашего документа.

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

    Чтобы начать удаление пустых строк, откройте документ в Microsoft Word. Нажмите «Главная» в меню, а затем выберите «Заменить» в правой части экрана.

    Нажмите

    Откроется окно «Найти и заменить». Нажмите на поле «Найти» и введите следующее:

    Каждый «^p» — это специальный код, обозначающий тег абзаца. Мы собираемся заменить экземпляры тегов из двух абзацев подряд одним тегом абзаца. В поле «Заменить на» введите следующее:

    Затем нажмите «Заменить все» в нижней части окна.

    Нажмите

    После того, как вы нажмете, все пустые строки будут удалены из вашего документа. Когда появится всплывающее окно с подтверждением, нажмите «ОК».

    Документ Word без пустых строк.

    Если вы по-прежнему видите какие-либо пустые строки, это означает, что вместо них было более двух последовательных пустых строк. В этом случае снова нажимайте «Заменить все» в окне «Найти и заменить», пока не будут удалены все лишние строки (или вы можете поэкспериментировать с количеством кодов «^p», которые вы найдете и замените, пока ваши потребности не будут удовлетворены) .

    Когда все будет готово, закройте окно «Найти и заменить». Если вас когда-нибудь раздражали горизонтальные линии, автоматически появляющиеся в Word при вводе определенных символов, вы также можете заменить их.

    • › Как восстановить метки панели задач в Windows 11
    • › Худшее, что есть в телефонах Samsung, — это программное обеспечение Samsung.
    • › Почему прозрачные чехлы для телефонов желтеют?
    • ›5 шрифтов, которые следует прекратить использовать (и лучшие альтернативы)
    • › Почему СМС должен умереть
    • › Что означает XD и как вы его используете?


    Дата присоединения к Lively Member, декабрь 2007 г. Сообщений 94

    слово [RESOLVED] - удалить все пустые строки из таблицы

    Здравствуйте. Мне нужно удалить все пустые строки из таблицы в текстовом документе. Моя таблица содержит вертикально объединенные ячейки.

    Я нашел этот код

    и я вызываю эту подпрограмму в конце своего кода таким образом

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

    Дата присоединения к PowerPoster, декабрь 2004 г. Сообщений: 25 555


    если в строке есть объединенная ячейка, она будет генерировать ошибку при проверке содержимого ячейки, так как столбцов меньше, чем в таблице, поэтому при ошибке я перехожу к следующему для цикла

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

    затемнить все переменные по мере необходимости, так как я часто делал это в другом месте своего кода, но публиковал только соответствующую часть

    вернитесь и отметьте свой исходный пост как решенный, если ваша проблема решена
    pete


    Дата присоединения к Lively Member, декабрь 2007 г. Сообщений 94

    Спасибо, westconn1, за ответ.

    Я поместил ваш код в подпрограмму таким образом

    но когда я вызываю подпрограмму в своем коде, я получаю ошибку времени выполнения 424 "Необходим объект" в этой строке

    Для каждой таблицы In ThisDocument.Tables

    Дата присоединения к PowerPoster, декабрь 2004 г. Сообщений: 25 555

    ранее вы использовали activedocument (в блоке with), но это не очень хороший код, особенно когда он находится в экземпляре объекта word

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

    затемнить все переменные по мере необходимости, так как я часто делал это в другом месте своего кода, но публиковал только соответствующую часть

    вернитесь и отметьте свой исходный пост как решенный, если ваша проблема решена
    pete


    Дата присоединения к Lively Member, декабрь 2007 г. Сообщений 94

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

    Что мне написать вместо "myworddoc.doc"?

    Извините, но я абсолютный новичок.

    Дата присоединения к PowerPoster, декабрь 2004 г. Сообщений: 25 555

    "document1" (без .doc) или любое другое название нового документа

    лучший способ — присвоить новому документу переменную при его открытии

    если d объявлен в общем разделе модуля кода, он будет доступен для всех процедур в этом модуле

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

    затемнить все переменные по мере необходимости, так как я часто делал это в другом месте своего кода, но публиковал только соответствующую часть

    вернитесь и отметьте свой исходный пост как решенный, если ваша проблема решена
    pete


    Дата присоединения к Lively Member, декабрь 2007 г. Сообщений 94

    В моем общем разделе кода я

    Set objword = CreateObject("Word.Application")
    objword.Visible = True
    Set objdoc = objword.Documents.Add

    как мне изменить эту строку

    Для каждой таблицы в документах("myworddoc.doc").tables ?

    Пожалуйста, не ненавидьте меня.
    Спасибо за терпение.


    Дата присоединения к Lively Member, декабрь 2007 г. Сообщений 94

    Для каждой таблицы в objword.ActiveDocument.Tables

    Я всегда получаю ошибку выполнения 424.


    Дата присоединения к Lively Member, декабрь 2007 г. Сообщений 94

    Все строки, определяющие мой документ,

    Дата присоединения к PowerPoster, декабрь 2004 г. Сообщений: 25 555

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

    затемнить все переменные по мере необходимости, так как я часто делал это в другом месте своего кода, но публиковал только соответствующую часть

    вернитесь и отметьте свой исходный пост как решенный, если ваша проблема решена
    pete


    Дата присоединения к Lively Member, декабрь 2007 г. Сообщений 94

    Первоначальное сообщение от westconn1

    Спасибо westconn1 за вашу доброту.

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

    Ваша подпрограмма идеальна, потому что если я напишу

    Для каждой таблицы в ActiveDocument.tables

    иногда это работает, и строка удаляется, но иногда строки не удаляются, и я не получаю никакой ошибки, а иногда я получаю ошибку выполнения 462.

    Дата присоединения к PowerPoster, декабрь 2004 г. Сообщений: 25 555

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

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

    затемнить все переменные по мере необходимости, так как я часто делал это в другом месте своего кода, но публиковал только соответствующую часть

    вернитесь и отметьте свой исходный пост как решенный, если ваша проблема решена
    pete


    Дата присоединения к Lively Member, декабрь 2007 г. Сообщений 94

    Спасибо westconn1 за время, которое вы уделили мне.
    Файл прикрепил.
    Проблема строго связана с этой другой веткой

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


    objword.ActiveDocument.Tables.Add Range:=objword.ActiveDocument.Tables(1).Cell(2, 2).Range, numrows:=2 + contalingue, NumColumns:=5, _
    DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
    wdAutoFitFixed

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

    Дата присоединения к PowerPoster, декабрь 2004 г. Сообщений: 25 555

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

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

    затемнить все переменные по мере необходимости, так как я часто делал это в другом месте своего кода, но публиковал только соответствующую часть

    вернитесь и отметьте свой исходный пост как решенный, если ваша проблема решена
    pete


    Дата присоединения к Lively Member, декабрь 2007 г. Сообщений 94

    Первоначальное сообщение от westconn1

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

    Проблема в том, что строки восстанавливаются из запроса к БД и я не знаю, как воссоздать аналогичную ситуацию без этого

    Возможно, это возможно с многомерным массивом, но я не знаю, как это сделать.
    Сегодня вечером я их изучу и попробую воссоздать проблему.

    Дата присоединения к PowerPoster, декабрь 2004 г. Сообщений: 25 555

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

    затемнить все переменные по мере необходимости, так как я часто делал это в другом месте своего кода, но публиковал только соответствующую часть

    вернитесь и отметьте свой исходный пост как решенный, если ваша проблема решена
    pete


    Дата присоединения к Lively Member, декабрь 2007 г. Сообщений 94

    Можно ли из файла word получить код, который его генерирует?

    Я прикрепил файл. Надеюсь, я понял, о чем вы меня спросили.

    Дата присоединения к PowerPoster, декабрь 2004 г. Сообщений: 25 555

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

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

    затемнить все переменные по мере необходимости, так как я часто делал это в другом месте своего кода, но публиковал только соответствующую часть

    вернитесь и отметьте свой исходный пост как решенный, если ваша проблема решена
    pete


    Дата присоединения к Lively Member, декабрь 2007 г. Сообщений 94

    Я последовал вашему предложению

    Для каждой таблицы в objdoc.tables

    но у меня всегда возникает ошибка выполнения 424.

    Мне очень жаль, что вы тратите время на то, чтобы помочь мне.


    Дата присоединения к Lively Member, декабрь 2007 г. Сообщений 94

    Дата присоединения к PowerPoster, декабрь 2004 г. Сообщений: 25 555

    Этот код находится в том же подразделе, где вы установили objdoc?
    если не objdoc может быть не в области действия, в этом случае у вас есть выбор:
    поместить весь код в один и тот же подпрограмму,
    или объявить objdoc как глобальную переменную, т.е. поместить объявление в верхнюю часть общего раздела формы,
    или передать objdoc как документ в другой подраздел,
    первый может быть самым простым

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

    затемнить все переменные по мере необходимости, так как я часто делал это в другом месте своего кода, но публиковал только соответствующую часть

    вернитесь и отметьте свой исходный пост как решенный, если ваша проблема решена
    pete

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