Maika8008
Thành viên gạo cội
Một lượt dạo qua cuốn sách Lập trình VBA cho MS Word vừa giới thiệu, tôi thấy từ môi trường Word lập trình VBA để điều khiển nó thì tính ứng dụng không cao khi mọi thứ gần như đã nhập và thiết đặt thủ công cả rồi. Tuy nhiên, đứng từ môi trường Excel thì lại khác. Nếu biết cách ứng biến trong trang văn bản Word thì từ dữ liệu đã qua Excel xử lý, ta có thể ghi dữ liệu sang Word, căn chỉnh nó thành 1 văn bản hoàn chỉnh rồi lưu trữ, in ấn 1 cách dễ dàng. Thậm chí có thể cập nhật tài liệu đã lưu trữ nếu dữ liệu Excel thay đổi.
Theo ý định đó, từ sách tôi cóp nhặt ra được một số mã VBA hữu ích chuyển nó sang chạy ở Excel làm thư viện để điều khiển Word cho những ai cần. Để dùng các macro khi muốn mở rộng, cần lưu ý:
1. Trong code tôi mới chỉ dùng phương thức GetObject để điều khiển tài liệu Word đã mở sẵn. Bạn có thể dùng CreateObject để mở 1 cửa sổ Word mới nếu trước đó chưa có cửa sổ nào mở.
2. Nếu đã đăng ký thư viện tham chiếu MS Word từ cửa sổ VBA -> Tools/References thì bạn có thể thoải mái dùng các hằng theo tên (bắt đầu bằng wd) của Word. Còn không thì bạn buộc phải tra giá trị của hằng trong Object Browser để thay vào tên hằng trong mã VBA nếu không muốn gặp lỗi. Để đơn giản cho mọi người thì tôi đã thay cả rồi và kèm theo 1 bảng tra ConstVBAWord để dùng sau này khi cần.
3. Cần tận dụng các hộp thoại dựng sẵn của Word khi viết mã. Ví dụ khi căn lề trang, thay vì ghi macro ra kiểu thế này để chạy:
làm cho Word phải ì ạch thực thi từng dòng, thì bạn dùng hôp thoại wdDialogFilePageSetup như sau:
Word chỉ phải thực thi 1 lần qua câu lệnh .Execute dưới cùng. Trong file kèm tôi cũng đã có sheet Buil-inDialogsWord liệt kê các hộp thoại của Word để dùng khi hữu sự.
4. Ngoài ra tôi còn đính kèm 1 file bảng kê macro được lập ra theo cách mà sách đã chỉ và đồng thời cũng dùng nó để test các macro luôn. Một số macro có ở đây nhưng tôi không chuyển sang Excel vì thấy không cần thiết.
5. Cuối cùng, không giống như Excel, ta có thể Undo thoải mái sau khi chạy 1 macro Word miễn là không quá số lần giới hạn.
Cập nhật file VBA_Word_CanThiet.xlsm: Xem trong file và code tại Module 2 sẽ thấy có cách hiện nút chạy macro mới, cách viết mã và xóa mã VBA trong module.
Theo ý định đó, từ sách tôi cóp nhặt ra được một số mã VBA hữu ích chuyển nó sang chạy ở Excel làm thư viện để điều khiển Word cho những ai cần. Để dùng các macro khi muốn mở rộng, cần lưu ý:
1. Trong code tôi mới chỉ dùng phương thức GetObject để điều khiển tài liệu Word đã mở sẵn. Bạn có thể dùng CreateObject để mở 1 cửa sổ Word mới nếu trước đó chưa có cửa sổ nào mở.
2. Nếu đã đăng ký thư viện tham chiếu MS Word từ cửa sổ VBA -> Tools/References thì bạn có thể thoải mái dùng các hằng theo tên (bắt đầu bằng wd) của Word. Còn không thì bạn buộc phải tra giá trị của hằng trong Object Browser để thay vào tên hằng trong mã VBA nếu không muốn gặp lỗi. Để đơn giản cho mọi người thì tôi đã thay cả rồi và kèm theo 1 bảng tra ConstVBAWord để dùng sau này khi cần.
3. Cần tận dụng các hộp thoại dựng sẵn của Word khi viết mã. Ví dụ khi căn lề trang, thay vì ghi macro ra kiểu thế này để chạy:
Rich (BB code):
Sub Macro1()
With ActiveDocument.PageSetup
.Orientation = wdOrientPortrait
.TopMargin = InchesToPoints(1)
.BottomMargin = InchesToPoints(0.9)
.LeftMargin = InchesToPoints(1)
.RightMargin = InchesToPoints(0.7)
.PageWidth = InchesToPoints(8.27)
.PageHeight = InchesToPoints(11.69)
End With
End Sub
Rich (BB code):
Sub DialogPageSetup()
With Application.Dialogs(wdDialogFilePageSetup)
.TopMargin = 1 & Chr$(34)
.BottomMargin = 0.9 & Chr$(34)
.LeftMargin = 1 & Chr$(34)
.RightMargin = 0.7 & Chr$(34)
.PageWidth = 8.27 & Chr$(34)
.PageHeight = 11.69 & Chr$(34)
.Execute
End With
End Sub
4. Ngoài ra tôi còn đính kèm 1 file bảng kê macro được lập ra theo cách mà sách đã chỉ và đồng thời cũng dùng nó để test các macro luôn. Một số macro có ở đây nhưng tôi không chuyển sang Excel vì thấy không cần thiết.
5. Cuối cùng, không giống như Excel, ta có thể Undo thoải mái sau khi chạy 1 macro Word miễn là không quá số lần giới hạn.
Cập nhật file VBA_Word_CanThiet.xlsm: Xem trong file và code tại Module 2 sẽ thấy có cách hiện nút chạy macro mới, cách viết mã và xóa mã VBA trong module.
File đính kèm
Lần chỉnh sửa cuối: