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

Я не уверен, где Рэй читал, но клавиша Alt не позволяет перемещать таблицы. Фактически, похоже, что это вообще не работает для перемещения таблицы, за одним исключением — если вы нажмете Shift + Alt, а затем воспользуетесь клавишами со стрелками вверх или вниз, таблица будет перемещена вверх или вниз на весь абзац в документе.

Другие комбинации клавиш тоже не работают. Вы могли бы подумать, что таблицы смещения будут работать так же, как и для других объектов в документе — вы выбираете объект, а затем используете клавиши со стрелками для смещения. Однако с таблицами он вообще не работает. Если вы выберете таблицу, а затем нажмете клавиши со стрелками вверх или вниз, Word отменит выбор таблицы и переместит точку вставки выше или ниже таблицы в документе.

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

(Вы также можете отформатировать рамку в текстовом поле, чтобы она не отображалась.)

Другой обходной путь — использовать макрос для выполнения движения. Следующий макрос перемещает таблицу на один пиксель вверх:

Sub MoveTableUp1()

' set pxl to the number of pixels to move: positive for down and '   negative for up     Const pxl As Single = -1

If Not Selection.Information(wdWithInTable) Then Exit Sub     With Selection.Tables(1)

.Rows.VerticalPosition = .Rows.VerticalPosition + PixelsToPoints(pxl)

End With End Sub

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

Вы должны отметить еще кое-что об этом макросе — он может испортить макет вашего документа. Видите ли, свойство VerticalPosition эффективно только в том случае, если ваша таблица настроена так, чтобы текст мог обтекать ее.

(Это настраивается в области «Обтекание таблицы» диалогового окна «Свойства таблицы».) Признавая это, когда вы используете макрос для настройки свойства VerticalPosition, он автоматически меняет значение таблицы с «нет» на «около». Это, очевидно, может повлиять на макет страницы, если вы ранее не включали перенос и таблица уже, чем ваша текстовая область.

Здесь также есть еще одна потенциальная «ошибка». Вы можете подумать, что можете настроить горизонтальное положение таблицы, изменив свойство VerticalPosition в приведенном выше макросе на HorizontalPosition. Это кажется логичным, но то, как это работает в макросе, может вызвать зацикливание.

Если настройка свойства VerticalPosition изменит обтекание таблицы с «none» на «around», настройка свойства HorizontalPosition не будет. Вместо этого в некоторых версиях Word это выдает ошибку.

Самый безопасный способ справиться со всеми этими причудами — настроить макрос так, чтобы он настраивал таблицу только в том случае, если для его свойства упаковки установлено значение True, следующим образом:

Sub MoveTableUp2()

Dim sTemp As String

' set pxl to the number of pixels to move: positive for down and '   negative for up     Const pxl As Single = -1

sTemp = ""

If Selection.Information(wdWithInTable) Then         With Selection.Tables(1).Rows             If .WrapAroundText Then                 .VerticalPosition = .VerticalPosition + PixelsToPoints(pxl)

Else                 sTemp = "Table is inline. No action taken."

End If         End With     Else         sTemp = "The insertion point is not within a table. No action taken."

End If     If sTemp > "" Then MsgBox sTemp End Sub

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

При желании вы можете перемещать стол на одну точку (1/72 дюйма) за раз. Вот версия макроса, который может обрабатывать это движение:

Sub MoveTableUp3()

Dim sTemp As String

' set pt to the number of points to move: positive for down and '   negative for up     Const pt As Single = -1

sTemp = ""

If Selection.Information(wdWithInTable) Then         With Selection.Tables(1).Rows             If .WrapAroundText Then                 .VerticalPosition = .VerticalPosition + pt             Else                 sTemp = "Table is inline. No action taken."

End If         End With     Else         sTemp = "The insertion point is not within a table. No action taken."

End If     If sTemp > "" Then MsgBox sTemp End Sub

Как уже говорилось, смещение таблицы по горизонтали, а не по вертикали просто связано с использованием свойства HorizontalPosition с объектом Rows, а не свойством VerticalPosition.

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

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

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

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

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

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (12136) относится к Microsoft Word 2007, 2010, 2013, 2016, 2019 и Word в Office 365.