QuânSysAd's Blog

15 tháng 11 2025

VBA : Điều chỉnh lại các cột trong bảng của tài liệu word để làm sách song ngữ.

 Sub AdjustThreeColumnTables()

    ' Bỏ qua lỗi và tiếp tục thực thi nếu có bảng không hợp lệ

    On Error Resume Next


    ' Khai báo các biến sẽ được sử dụng

    Dim tbl As Table

    Dim pageWidth As Single

    Dim remainingWidth As Single

    Dim col1and3Width As Single

    Dim cell As Cell


    ' Xác định độ rộng có thể sử dụng của trang giấy (chiều rộng trang trừ đi lề trái và phải)

    With ActiveDocument.PageSetup

        pageWidth = .PageWidth - .LeftMargin - .RightMargin

    End With


    ' Bắt đầu vòng lặp qua từng bảng trong tài liệu

    For Each tbl In ActiveDocument.Tables

        ' Chỉ thực hiện trên các bảng có chính xác 3 cột

        If tbl.Columns.Count = 3 Then

            ' Đảm bảo bảng không tự động điều chỉnh kích thước

            tbl.AllowAutoFit = False

            

            ' Thiết lập loại độ rộng ưa thích thành điểm (points) và đặt độ rộng của bảng sao cho vừa khít trang

            tbl.PreferredWidthType = wdPreferredWidthPoints

            tbl.PreferredWidth = pageWidth

            

            ' Cho phép cột giữa tự động điều chỉnh theo nội dung để có chiều rộng nhỏ nhất có thể

            tbl.Columns(2).AutoFit

            

            ' Tính toán độ rộng còn lại cho hai cột kia

            remainingWidth = pageWidth - tbl.Columns(2).Width

            col1and3Width = remainingWidth / 2

            

            ' Gán độ rộng đã tính cho cột 1 và cột 3

            tbl.Columns(1).Width = col1and3Width

            tbl.Columns(3).Width = col1and3Width

            

            ' Lặp qua từng ô trong cột đầu tiên

            For Each cell In tbl.Columns(1).Cells

                ' Căn đều (justify) nội dung văn bản trong ô

                cell.Range.ParagraphFormat.Alignment = wdAlignParagraphJustify

                ' Thiết lập để văn bản vừa khít với kích thước ô

                cell.FitText = True

            Next cell

            

            ' Lặp qua từng ô trong cột thứ ba

            For Each cell In tbl.Columns(3).Cells

                ' Căn đều (justify) nội dung văn bản trong ô

                cell.Range.ParagraphFormat.Alignment = wdAlignParagraphJustify

                ' Thiết lập để văn bản vừa khít với kích thước ô

                cell.FitText = True

            Next cell

        End If

    Next tbl

    

    ' Thông báo cho người dùng khi quá trình hoàn tất

    MsgBox "Đã hoàn tất việc điều chỉnh các bảng có 3 cột!", vbInformation

End Sub