NTM Solutions

Thứ Bảy, 11 tháng 12, 2021

VBA Macro trong Microsoft Word

 Mến chào các bạn!!!


Chủ đề VBA Macro trong Microsoft Excel đã có nhiều người viết (phần lớn là dành cho bên kế toán)


Hôm nay, mình sẽ viết về chủ đề VBA Macro trong Microsoft Word, vì hầu như trên mạng ít có bài viết nào Tiếng Việt về chủ đề này.


01 - Cách tạo 01 macro trong Microsoft Word

+ Ta vào menu View-Macros-Record Macro


Sau đó Word sẽ hiện ra cửa sổ con như sau:

  1. Macro Name: đặt tên Macro
  2. Assign macro to: gán macro vào 01 nút (Button) trên thanh công cụ của Word hoặc gán vào 01 phím tắt do ta định nghĩa (Keyboard)
  3. Store macro in: mặc định macro sẽ được lưu vào tập tin Normal.dotm để khi mở tập tin nào của Word cũng dùng được.
  4. Description: mô tả về macro.
+ Khi đang ghi macro, con trỏ chuột sẽ "dính" vào 01 cuộn băng cassete.

+ Lúc này các thao tác bấm vào thanh công cụ và bàn phím sẽ được Word ghi lại thành dòng lệnh VBA.

Chú ý: 01 số thao tác dùng chuột như định dạng Font sẽ không được ghi lại như mong muốn => dùng phím tắt Ctrl + D để mở bảng Font sẽ được hệ thống ghi lại.

+ Để dừng ghi macro ta vào menu View - Macros - Stop Recording

02 - Xem và chạy Macro

Vào menu View - Macros - View Macros


Bên TRÁI là bảng chọn các Macro. Bên PHẢI lần lượt là các nút:
  1. Run : chạy macro đã chọn (tô màu XANH).
  2. Step Into: chạy dò từng bước để kiểm tra lỗi.
  3. Edit: xem mã nguồn VBA của macro.
  4. Create: tạo mới 01 macro.
  5. Delete: xóa macro đang chọn XANH.
  6. Organizer: sắp xếp macro.
Khi bấm vào nút Edit, ta sẽ thấy 01 cửa sổ lệnh VBA hiện ra như bên Excel. Các macro được lưu thành các Sub riêng biệt giống như vầy:

Sub Cam()

'

' Cam Macro

'

Selection.Font.Color = 809458

Selection.Font.Name = "Consolas"

 

End Sub


Nếu bạn muốn đổi phím tắt đã gán cho các macro thì vào đây:


Menu File - Options - Customize Ribbon - Nút Customize (mục Keyboard Shortcut) - trong bảng Categories, chọn dòng Macros - mục bên TRÁI chọn macro muốn đổi phím tắt - bấm vào mục Press new shortcut key  và bấm tổ hợp phím mới cho macro

Bây giờ ta vào phần lập trình VBA Macro


Nếu đọc được tài liệu Tiếng Anh thì mình giới thiệu các bạn liên kết đến trang hướng dẫn tự động hóa các thao tác thông dụng của Word trên trang web chính thức của Microsoft:

Automating Common Word Tasks | Microsoft Docs

Còn đây là 06 thao tác thông dụng do mình biên soạn bằng Tiếng Việt:

1. Định dạng vùng chọn

 

Sub FormatSelection()

 With Selection.Font

 .Name = "Times New Roman"

 .Size = 14

 .AllCaps = True

 End With

 With Selection.ParagraphFormat

 .LeftIndent = InchesToPoints(0.5)

 .Space1

 End With

End Sub


hoặc có thể viết ngắn như sau:

Selection.Font.Color = 809458

Selection.Font.Name = "Consolas"


2. Chèn từ và định dạng ký tự, đoạn văn

+ Trong ví dụ sau sẽ chèn từ “Title” ở đầu văn bản.

+ Đoạn văn đầu tiên sẽ được căn giữa và 01 khoảng cách 0.5 inch sẽ được thêm vào sau đoạn văn.

+ Từ “Title” sẽ được định dạng font “Arial” cỡ chữ 24.

Sub InsertFormatText() 
 Dim rngFormat As Range 
 Set rngFormat = ActiveDocument.Range(Start:=0, End:=0) 
 With rngFormat 
 .InsertAfter Text:="Title" 
 .InsertParagraphAfter 
 With .Font 
 .Name = "Tahoma" 
 .Size = 24 
 .Bold = True 
 End With 
 End With 
 With ActiveDocument.Paragraphs(1) 
 .Alignment = wdAlignParagraphCenter 
 .SpaceAfter = InchesToPoints(0.5) 
 End With 
End Sub

3. Tìm 01 chuỗi trong vùng chọn

Findingand Replacing Text or Formatting | Microsoft Docs

With Selection.Find

 .Forward = True

 .Wrap = wdFindStop

 .Text = "Hello"

 .Execute

End With


4. Tìm 01 chuỗi trong toàn bộ văn bản

 

+ Tìm từ “Blue” trong toàn bộ văn bản và Tô Đậm từ đầu tiên tìm thấy.

With ActiveDocument.Content.Find

 .Text = "blue"

 .Forward = True

 .Execute

 If .Found = True Then .Parent.Bold = True

End With

 

+ Tìm 02 chuỗi “react”“react-native” trong toàn bộ văn bản và định dạng toàn bộ các từ tìm thấy.

Set vungChon = ActiveDocument.Content 'chon toan bo van ban

 

'to mau chu react

Do

With vungChon.Find

 .Text = "'react'"

 .Forward = True

 .Execute

 

 If .Found = True Then

    .Parent.Font.Color = 45958

    .Parent.Font.Name = "Consolas"

 Else

    Exit Do

 End If

 

End With

 

Loop

 

 

'to mau chu react-native

'không reset lai vungChon se bi sai

 

Set vungChon = ActiveDocument.Content

 

Do

With vungChon.Find

 .Text = "'react-native'"

 .Forward = True

 .Execute

 

 If .Found = True Then

    .Parent.Font.Color = 45958

    .Parent.Font.Name = "Consolas"

 Else

    Exit Do

 End If

 

End With

 

Loop

 

5. Thay thế chuỗi bằng Replace

With Selection.Find

 .ClearFormatting

 .Text = "hi"

 .Replacement.ClearFormatting

 .Replacement.Text = "hello"

 .Execute Replace:=wdReplaceAll, Forward:=True, _

 Wrap:=wdFindContinue

End With

Ví dụ trên thay thế toàn bộ các chuỗi “hi” tìm thấy bằng chuỗi “hello” trong vùng chọn.


6. Làm việc với Table

Workingwith tables | Microsoft Docs

Tạo bảng, chèn chữ và định dạng

Ví dụ sau sẽ tạo 01 bảng có 04 cột-03 dòng ở đầu văn bản hiện hành.

Chèn chữ “Cell “ + CellNo ở mỗi ô và định dạng bảng tự động.

Sub CreateNewTable()

 Dim docActive As Document

 Dim tblNew As Table

 Dim celTable As Cell

 Dim intCount As Integer


 Set docActive = ActiveDocument

 Set tblNew = docActive.Tables.Add( _

 Range:=docActive.Range(Start:=0, End:=0), NumRows:=3, _

 NumColumns:=4)

 intCount = 1


 For Each celTable In tblNew.Range.Cells

  celTable.Range.InsertAfter "Cell " & intCount

  intCount = intCount + 1

 Next celTable


 tblNew.AutoFormat Format:=wdTableFormatColorful2, _

 ApplyBorders:=True, ApplyFont:=True, ApplyColor:=True

End Sub

 

Chèn chữ vào ô trong bảng

·         Ví dụ sau sẽ chèn chữ “Cell 1,1” vào ô đầu tiên trong bảng đầu tiên của văn bản hiện hành.

·         Phương thức Cell() trả về 01 đối tượng Cell đơn lập.

·         Thuộc tính .Range trả về 01 đối tượng Range.

·         Phương thức Delete để xóa chữ đang có trong ô.

·         Phương thức InsertAfter để chèn chuỗi “Cell 1,1”

 

Sub InsertTextInCell()

 If ActiveDocument.Tables.Count >= 1 Then

  With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range

   .Delete

   .InsertAfter Text:="Cell 1,1"

  End With

 End If

End Sub


Nếu vẫn chưa rõ các bạn xem thêm video clip sau:

By #drM

Không có nhận xét nào:

Đăng nhận xét

Facebook Youtube RSS