Trong bài viết này, Học Excel Online sẽ hướng dẫn bạn cách sao chép và dán ảnh logo, đoạn văn bản và bảng dữ liệu từ Excel vào Word thông qua VBA.
Áp dụng từ ví dụ trước đó
Bài viết này sẽ nối tiếp ví dụ trước hướng dẫn Cách sao chép và dán nhiều bảng tính Excel vào Word thông qua VBA, tham khảo tại đây. Dưới đây là hình minh họa:
Mã lệnh VBA được sử dụng
Sub ExportExcelToWord()
‘PURPOSE: Copy/Paste An Excel Table, Text, & Logo Image Into a New Word Document
‘NOTE: Must have Word Object Library Active in Order to Run _
(VBE > Tools > References > Microsoft Word 12.0 Object Library)
‘SOURCE: www.TheSpreadsheetGuru.com
Dim tbl As Excel.Range
Dim WordApp As Word.Application
Dim myDoc As Word.Document
Dim WordTable As Word.Table
Dim myText As Excel.Range
Dim myLogo As Excel.Shape
‘Optimize Code
Application.ScreenUpdating = False
Application.EnableEvents = False
‘Copy Data from Excel
Set tbl = ThisWorkbook.Worksheets(Sheet1.Name).ListObjects(“Table1”).Range
Set myText = ThisWorkbook.Worksheets(Sheet1.Name).Range(“B4:B5”)
Set myLogo = ThisWorkbook.Worksheets(Sheet1.Name).Shapes(“Logo_Image”)
‘Create an Instance of MS Word
On Error Resume Next
‘Is MS Word already opened?
Set WordApp = GetObject(class:=”Word.Application”)
‘Clear the error between errors
Err.Clear
‘If MS Word is not already open then open MS Word
If WordApp Is Nothing Then Set WordApp = CreateObject(class:=”Word.Application”)
‘Handle if the Word Application is not found
If Err.Number = 429 Then
MsgBox “Microsoft Word could not be found, aborting.”
GoTo EndRoutine
End If
On Error GoTo 0
‘Optimize Code
WordApp.Application.ScreenUpdating = False
‘Make MS Word Visible and Active
WordApp.Visible = True
WordApp.Activate
‘Create a New Document
Set myDoc = WordApp.Documents.Add
‘Copy/Paste Logo
myLogo.Copy
myDoc.Paragraphs(myDoc.Paragraphs.Count).Range.Paste
‘Spacing
myDoc.Paragraphs.Add
myDoc.Paragraphs.Add
myDoc.Paragraphs.Add
‘Copy/Paste Text
myText.Copy
myDoc.Paragraphs(myDoc.Paragraphs.Count).Range.PasteAndFormat (wdFormatPlainText)
‘Spacing
myDoc.Paragraphs.Add
myDoc.Paragraphs.Add
‘Copy Excel Table Range
tbl.Copy
‘Paste Table into MS Word
myDoc.Paragraphs(myDoc.Paragraphs.Count).Range.PasteExcelTable _
LinkedToExcel:=False, _
WordFormatting:=False, _
RTF:=False
‘Autofit Table so it fits inside Word Document
Set WordTable = myDoc.Tables(1)
WordTable.AutoFitBehavior (wdAutoFitWindow)
EndRoutine:
‘Optimize Code
Application.ScreenUpdating = True
Application.EnableEvents = True
WordApp.Application.ScreenUpdating = True
‘Clear The Clipboard
Application.CutCopyMode = False
End Sub
Thiết lập biến số cho từng đối tượng trong Excel
Đoạn mã lệnh trên sẽ tự thiết lập các biến số tương ứng với từng loại đối tượng cần sao chép
Việc đặt biến số như này sẽ đơn giản hóa quá trình tham chiếu sau này, đồng thời giúp ta phân loại được các đối tượng Excel cần sao chép.
‘Copy Data from Excel
Set tbl = ThisWorkbook.Worksheets(Sheet1.Name).ListObjects(“Table1”).Range
Set myText = ThisWorkbook.Worksheets(Sheet1.Name).Range(“B4:B5”)
Set myLogo = ThisWorkbook.Worksheets(Sheet1.Name).Shapes(“Logo_Image”)
Đếm số lượng đoạn văn cần sao chép
Thay vì phải tự điền tay các giá trị số thứ tự cho từng đoạn văn cần sao chép một, ta chỉ cần kiếm lại số lượng đoạn văn sau mỗi lần sao chép là xong. Điều này đảm bảo việc đoạn văn cuối cùng luôn được sao chép cẩn thận và đồng thời hạn chế các lỗi xảy ra nếu như tham chiếu vượt số lượng (chẳng hạn hệ thống cố gắng sao chép 6 đoạn văn, trong khi thực tế chỉ có 4 đoạn văn cần phải sao chép mà thôi). Ta sẽ sử dụng đoạn mã lệnh dưới đây:
myDoc.Paragraphs(myDoc.Paragraphs.Count).Range.Paste
Dán các đoạn văn bản và ký tự
Bài viết trước đã nói về cách sao chép và dán nhiều bảng tính Excel vào Word thông qua VBA (có thể tham khảo theo đường link ở phần đầu bài viết), và việc sao chép ảnh logo cũng tương đối đơn giản. Riêng các đoạn văn bản thì lại có chút khác biệt. Nếu sử dụng phương pháp dán thông thường bằng lệnh Paste, bạn sẽ có 1 đoạn văn bản được định dạng theo Word mặc định. Cách này được thiết lập qua lệnh Keep Source Formatting, trừ phi bạn muốn thay đổi định dạng mặc định cho các đối tượng cần sao chép. Để thiết lập việc sao chép chỉ ký tự nguyên trạng mà thôi, bạn cần sử dụng lệnh PasteAndFormat và định dạng ký tự nguyên gốc (wdFormatPlainText).
‘Copy/Paste Text
myText.Copy
myDoc.Paragraphs(myDoc.Paragraphs.Count).Range.PasteAndFormat (wdFormatPlainText)
Dãn cách dòng cho đoạn văn
Khi thêm các đoạn văn vào một trang soạn thảo thì vô hình chung bạn cũng sao chép luôn cả thao tác xuống dòng văn bản (phím Enter) trong Word. Bạn không bị giới hạn số lượng đoạn văn bản cần sao chép, miễn sao cho kết quả nhận được là đúng với mong muốn của bạn. Trong ví dụ này, có trường hợp ta cần phải sao chép cùng lúc 3 đoạn văn trong cùng một hàng, lại có trường hợp bạn chỉ cần sao chép 2 đoạn thôi. Nếu muốn tăng số lượng đoạn văn cần sao chép, bạn hoàn toàn có thể sử dụng mã lệnh phía dưới để tạo thêm các vòng lặp tương tự:
‘Spacing (add 20 paragraphs)
For x = 1 To 20
myDoc.Paragraphs.Add
Next x