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

Sub PasteToCells()

Dim TargetRange As Range     Dim oTargCell As Cell

If Selection.Cells.Count = 0 Then         'Quit if no cells in selection         MsgBox "No cells selected", vbCritical         Exit Sub     End If     On Error Resume Next     Set TargetRange = Selection.Range     For Each oTargCell In Selection.Cells         oTargCell.Range.Paste     Next oTargCell     TargetRange.Select End Sub

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

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

Настоящая суть макроса — в цикле For …​ Next. Он проходит по ячейкам в выделенном фрагменте и заменяет все, что есть, содержимым буфера обмена. Наконец, снова выбирается исходный выбор, и макрос завершается.

Вы, наверное, заметили, что в макросе есть также оператор On Error. Этот оператор в основном указывает Word игнорировать любые ошибки и перейти к следующему оператору. Ошибки, которые могут быть вызваны, включают запуск макроса без пустого буфера обмена или попытку вставить таблицу в ячейку таблицы. Word не будет выполнять ни одну из задач, но будет продолжать попытки, пока не будет выполнен со всеми ячейками в выделенном фрагменте.

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

Sub PasteToCellsStart()

Dim TargetRange As Range     Dim oTargCell As Cell     Dim PasteRange As Range

If Selection.Cells.Count = 0 Then         'Quit if no cells in selection         MsgBox "No cells selected", vbCritical         Exit Sub     End If     On Error Resume Next     Set TargetRange = Selection.Range     For Each oTargCell In Selection.Cells         Set PasteRange = oTargCell.Range         PasteRange.Collapse wdCollapseStart         PasteRange.Paste     Next oTargCell     TargetRange.Select End Sub

Последней модификацией будет создание макроса, который будет вставлять в конец содержимого ячеек. Вы могли подумать, что можете заменить wdCollapseStart на wdCollapseEnd в приведенном выше макросе, но это не работает должным образом в таблицах. Вместо этого вы должны заменить цикл For …​ Next в приведенном выше макросе. В следующем примере показана измененная версия макроса.

Sub PasteToCellsEnd()

Dim TargetRange As Range     Dim oTargCell As Cell     Dim PasteRange As Range

If Selection.Cells.Count = 0 Then         'Quit if no cells in selection         MsgBox "No cells selected", vbCritical         Exit Sub     End If     On Error Resume Next     Set TargetRange = Selection.Range     For Each oTargCell In Selection.Cells         Set PasteRange = oTargCell.Range.Characters.Last         PasteRange.Collapse wdCollapseStart         PasteRange.Paste     Next oTargCell     TargetRange.Select End Sub

_Примечание: _

Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (13157) применим к Microsoft Word 2007, 2010, 2013, 2016, 2019 и Word в Office 365. Вы можете найти версию этого совета для старый интерфейс меню Word здесь:

link: / word-Filling_Table_Cells_with_a_Macro [Заполнение ячеек таблицы макросом].