• 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

Logo Học Excel Online Inverse white

Đăng ký học qua Email Listen@hocexcel.online

Hộ kinh doanh Học Excel Online.
Số ĐK: 17A80048102

© Học Excel Online. All rights reserved.