Ray tự hỏi liệu có cách nào để di chuyển toàn bộ bảng Word theo chiều dọc, từng pixel một. Mọi thứ anh ấy đã đọc chỉ ra rằng việc nắm lấy nó và giữ phím Alt sẽ cho phép điều đó, nhưng nó không hoạt động trơn tru.

Tôi không chắc Ray đã đọc ở đâu, nhưng phím Alt không cho phép di chuyển bảng. Trên thực tế, nó dường như không hoạt động đối với chuyển động của bảng, ngoại trừ một ngoại lệ — nếu bạn nhấn Shift + Alt và sau đó sử dụng các phím mũi tên lên hoặc xuống, bảng sẽ được di chuyển lên hoặc xuống toàn bộ đoạn trong tài liệu của bạn.

Các tổ hợp phím bấm khác cũng không hoạt động. Bạn sẽ nghĩ rằng thao tác di chuyển bảng sẽ hoạt động như đối với các đối tượng khác trong tài liệu — bạn chọn đối tượng và sau đó sử dụng các phím mũi tên để di chuyển. Tuy nhiên, nó không hoạt động với các bảng. Nếu bạn chọn bảng và sau đó nhấn các phím mũi tên lên hoặc xuống, thì Word sẽ bỏ chọn bảng và di chuyển điểm chèn lên trên hoặc dưới bảng trong tài liệu.

Tuy nhiên, có một số giải pháp thay thế bạn có thể sử dụng. Trước tiên, bạn có thể điều chỉnh cách đặt bảng của mình trong tài liệu. Chỉ cần đặt chúng trong hộp văn bản, sau đó bạn có thể sử dụng các phím mũi tên để di chuyển hộp văn bản.

(Bạn cũng có thể định dạng đường viền trên hộp văn bản để nó không hiển thị.)

Một giải pháp khác là sử dụng macro để thực hiện chuyển động. Macro sau sẽ di chuyển bảng lên một pixel:

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

Tất cả những gì bạn cần làm là đảm bảo rằng điểm chèn nằm trong bảng bạn muốn di chuyển. Nếu bạn muốn di chuyển bảng xuống thay vì lên, chỉ cần thay đổi định nghĩa của hằng số pxl thành giá trị dương 1 thay vì âm 1.

Có điều gì khác bạn cần lưu ý về macro này — nó có thể làm rối bố cục tài liệu của bạn. Bạn thấy đấy, thuộc tính VerticalPosition chỉ có hiệu quả nếu bảng của bạn được định cấu hình để cho phép văn bản bao quanh nó.

(Điều này được cấu hình trong khu vực Table Wrapping của hộp thoại Table Properties.) Nhận ra điều này, khi bạn sử dụng macro để điều chỉnh thuộc tính VerticalPosition, nó sẽ tự động thay đổi bảng từ “không có” thành “xung quanh”. Điều này, rõ ràng, có thể ảnh hưởng đến bố cục trang nếu trước đó bạn không bật tính năng gói và bảng hẹp hơn vùng văn bản của bạn.

Có một “gotcha” tiềm năng khác ở đây. Bạn có thể nghĩ rằng bạn có thể điều chỉnh vị trí ngang của bảng bằng cách thay đổi thuộc tính VerticalPosition trong macro trên thành HorizontalPosition. Điều này có vẻ hợp lý, nhưng cách nó hoạt động trong macro có thể khiến bạn phải lặp lại.

Trong đó điều chỉnh thuộc tính VerticalPosition sẽ thay đổi gói bảng từ “không có” thành “xung quanh”, điều chỉnh thuộc tính HorizontalPosition sẽ không. Thay vào đó, trên một số phiên bản Word, nó sẽ báo lỗi cho bạn.

Cách an toàn nhất để giải quyết tất cả những điều kỳ quặc này là điều chỉnh macro để đảm bảo rằng nó chỉ điều chỉnh một bảng nếu thuộc tính gói của nó được đặt thành True, theo cách này:

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

Biến thể này của macro cũng bao gồm thêm một chút phản hồi cho người dùng để nếu không có hành động nào được thực hiện, người dùng sẽ được thông báo tại sao lại xảy ra trường hợp này.

Nếu muốn, bạn có thể di chuyển bảng một điểm (1/72 inch) tại một thời điểm. Đây là phiên bản của macro có thể xử lý chuyển động này:

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

Như đã thảo luận, di chuyển bảng theo chiều ngang thay vì chiều dọc chỉ đơn giản là sử dụng thuộc tính HorizontalPosition với đối tượng Rows chứ không phải thuộc tính VerticalPosition.

Tuy nhiên, hãy nhớ rằng các lưu ý đã thảo luận cũng như cách sử dụng thuộc tính HorizontalPosition với thuộc tính VerticalPosition. Với suy nghĩ này, bạn có thể dễ dàng tạo bốn phiên bản macro của mình (cho mỗi hướng trong số bốn hướng mà bạn có thể muốn di chuyển bảng của mình) và sau đó gán các phím tắt cho macro.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên các trang WordTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

WordTips là nguồn của bạn để đào tạo Microsoft Word hiệu quả về chi phí.

(Microsoft Word là phần mềm xử lý văn bản phổ biến nhất trên thế giới.) Mẹo này (12136) áp dụng cho Microsoft Word 2007, 2010, 2013, 2016, 2019 và Word trong Office 365.