• blog.hocexcel.online
  • Excel VBA
  • 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

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

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

  • Shape: Đại diện cho các ảnh logo, biểu tượng
  • Range: Đại diện cho các đoạn văn bản, ký tự chữ
  • ListObject: Đại diện cho các bảng dữ liệu

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


Tác giả: dtnguyen (Nguyễn Đức Thanh)

@ Học Excel Online | DTNguyen.business
· · ·

Khóa học mới xuất bản

© Học Excel Online. All rights reserved.