Các macro hữu ích trong việc dùng Excel điều khiển Word
Một lượt dạo qua cuốn sách [URL='www.giaiphapexcel.com/diendan/threads/s%C3%A1ch-l%E1%BA%ADp-tr%C3%ACnh-vba-cho-ms-word-b%E1%BA%A3n-ti%E1%BA%BFng-vi%E1%BB%87t.165152/']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:
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
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:
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
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.
www.giaiphapexcel.com/diendan/threads/c%C3%A1c-macro-h%E1%BB%AFu-%C3%ADch-trong-vi%E1%BB%87c-d%C3%B9ng-excel-%C4%91i%E1%BB%81u-khi%E1%BB%83n-word.165190/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Dùng Word thì không cần dùng đến macro, trừ những ai làm những việc thường xuyên với các file Word lớn như luận án, luận văn chẳng hạn. Do đó tôi đâu quan tâm đến VBA Word. Tuy nhiên đến 1 ngày có 1 người bạn nhờ chuyển những văn bản + mẫu biểu (đã được người khác thiết kế sẵn trên Excel) qua Word, thế là VBA mới có đất dụng võ.
Tùy vào việc bạn nghĩ vị trí tùy chọn ấy như thế nào. Nếu thiết kế sẵn thì có thể chèn nó vào 1 bookmark hoặc 1 ô của bảng. Tôi thấy thường thì trong văn bản người ta hay dùng bảng để chứa các tiêu đề đầu hoặc cuối để dễ bố trí trên trang. Do vậy tìm đúng index của bảng rồi chèn. Còn không thiết kế sẵn thì tìm 1 cụm từ nào đó làm điểm mốc để bố trí điểm chèn, hoặc tìm vị trí cuối trang rồi tính ngược lên làm điểm chèn, hoặc xác định tọa độ x,y để chèn…
Còn kiểm soát độ lớn của của shape trong mối tương quan với trang layout thì tôi chưa nghĩ đến, nhưng nếu bám vào các macro hữu ích kia thì chắc sẽ làm được
Tôi không có code nào sẵn cho việc đó, nhưng tôi nghĩ rằng sau khi chèn bạn định lại kích thước dấu cho bằng với con dấu nhỏ nhất là được.
Khi bạn dùng Table (1 cell) thì bạn đã khống chế được độ rộng và chiều cao của nó khi thiết kế rồi. Khi đó hình ảnh kích thước nào cũng tự resize cho vừa kích thước Cell đã thiết kế.
Bạn thiết kế theo hình. Khi đó Table sẽ không tự resize mà file ảnh sẽ tự resize. Nhưng bạn cũng chú ý sự tương quan giữa tỉ lệ ảnh, table sẽ giữ tỉ lệ ảnh không đổi dẫn đến có thể table sẽ tăng chiều cao để tương đương tỉ lệ với độ rộng mà bạn thiết kế (không bị biến dạng ảnh)6105
Tôi thì biết style nhưng dùng không thuần thục, ví dụ làm sao buộc style đã chỉnh sửa sẽ áp dụng được cho các tài liệu mở sau đó.
Còn chuyện làm việc thường xuyên với file lớn thì dùng macro để tạo các cấp heading để từ đó tạo mục lục vẫn hiệu quả mà bác.
Tôi có 1 ví dụ cho bạn: chèn con dấu chứng nhận không sợ vợ –=0 vào table số 1 và chỉnh lại kích thước cho nó.
Nó không vừa trong ô đâu. Cái ô chỉ là nơi định vị thôi. Bạn cần thử kích thước rồi quyết định chọn cỡ nào là hợp lý.
Cập nhật một số lệnh điều khiển Word đơn giản và viết mã, xóa mã VBA trong module: File Excel đính kèm
Thiết lập để chèn và viết lên module: Options -> Trust Center -> Trust Center Settings… -> Macro Settings -> chọn Trust access to the VBA project object model