Макрослово удаляет пустые строки таблицы
Обновлено: 21.11.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
Спасибо за ваше предложение. Я проверил это, и я боюсь, что он не удаляет строки, у меня все еще остаются одна или две строки с маркерами и никакой информации рядом с ними.
Есть другие идеи?
Это должно работать, и работает здесь, если все оставшиеся ячейки в строке пусты — пробел в ячейке заставит его игнорировать строку. Нажмите кнопку � на вкладке «Главная», чтобы отобразить форматирование, или, если вы не можете найти причину, опубликуйте копию таблицы, которая не работает как вложение в документ.
Это должно работать для пробела, но не для (скажем) неразрывного пробела или символа табуляции. Не зная, что находится в ячейке, сложно найти решение.
Таблицы необходимы для документа, особенно для хранения различных типов данных. Иногда длинная таблица может превышать страницу и простираться на несколько. Поэтому, когда таблица становится длинной и сложной, вы можете принять меры для ее упрощения. Например, вы можете удалить ненужные пустые строки и столбцы.
Ниже приведены 3 метода, которые вы можете использовать.
Способ 1. Удаление пустых строк и столбцов вручную
- Сначала выберите пустую строку или столбец.
- Затем щелкните правой кнопкой мыши, чтобы открыть контекстное меню. В меню выберите "Удалить строки" или "Удалить столбцы" соответственно. ол>р>
- Во-первых, повторите шаги метода 2, чтобы установить и запустить макрос.
- Только на этот раз замените этот макрос следующим:
- › Как восстановить метки панели задач в Windows 11
- › Худшее, что есть в телефонах Samsung, — это программное обеспечение Samsung.
- › Почему прозрачные чехлы для телефонов желтеют?
- ›5 шрифтов, которые следует прекратить использовать (и лучшие альтернативы)
- › Почему СМС должен умереть
- › Что означает XD и как вы его используете?
К сожалению, таким способом нельзя выделить несколько непоследовательных строк или столбцов и удалить их вместе. Для этого вы можете обратиться к нашей предыдущей статье: 5 быстрых методов для пакетного удаления нескольких строк или столбцов в вашей таблице Word
Способ 2. Пакетное удаление всех пустых строк и столбцов в таблице
Метод 1 имеет свои ограничения. Поэтому мы предложим вам способ пакетного удаления строк и столбцов в таблице с помощью кодов VBA.
Через несколько секунд вы удалите все пустые строки и столбцы в этой таблице.
Способ 3. Пакетное удаление всех пустых строк и столбцов во всех таблицах документа
Восстановить поврежденный документ
В настоящее время существует не только способ восстановить потерянные данные. Например, использование резервных копий всегда остается вашим главным приоритетом. Если это не удовлетворяет вашу потребность в получении последней информации, вы можете попробовать инструмент восстановления документов.
Махеш Маквана
Махеш Маквана
Писатель
Махеш Маквана — технический писатель-фрилансер, специализирующийся на написании практических руководств. Он пишет технические учебники уже более десяти лет. Он написал для некоторых известных технических сайтов, включая MakeUseOf, MakeTechEasier и Online Tech Tips. Подробнее.
Вручную удалять лишние пустые строки из документа Microsoft Word утомительно. К счастью, встроенная в Word функция может удалить все пустые строки сразу. Вот как это сделать.
Как работают пустые строки в Microsoft Word
Microsoft Word добавляет скрытый тег (так называемый «тег абзаца») в конец каждой строки всякий раз, когда вы нажимаете Enter. Вы можете увидеть эти теги в своем документе, щелкнув значок абзаца (который выглядит как перевернутая буква «P» с двумя линиями) на вкладке «Главная» в Word.
Используя функцию «Найти и заменить» в Word, вы можете заменить теги двойных абзацев одним тегом. Это удалит лишние пустые строки из вашего документа.
Как удалить лишние пустые строки в документе Word
Чтобы начать удаление пустых строк, откройте документ в Microsoft Word. Нажмите «Главная» в меню, а затем выберите «Заменить» в правой части экрана.
Откроется окно «Найти и заменить». Нажмите на поле «Найти» и введите следующее:
Каждый «^p» — это специальный код, обозначающий тег абзаца. Мы собираемся заменить экземпляры тегов из двух абзацев подряд одним тегом абзаца. В поле «Заменить на» введите следующее:
Затем нажмите «Заменить все» в нижней части окна.
После того, как вы нажмете, все пустые строки будут удалены из вашего документа. Когда появится всплывающее окно с подтверждением, нажмите «ОК».
Если вы по-прежнему видите какие-либо пустые строки, это означает, что вместо них было более двух последовательных пустых строк. В этом случае снова нажимайте «Заменить все» в окне «Найти и заменить», пока не будут удалены все лишние строки (или вы можете поэкспериментировать с количеством кодов «^p», которые вы найдете и замените, пока ваши потребности не будут удовлетворены) .
Когда все будет готово, закройте окно «Найти и заменить». Если вас когда-нибудь раздражали горизонтальные линии, автоматически появляющиеся в Word при вводе определенных символов, вы также можете заменить их.
Дата присоединения к 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
Читайте также: