Thông tin cơ bản về tự động hóa OLE bằng VBA trong Microsoft Excel
Khi bạn muốn sử dụng chức năng từ các ứng dụng khác, bạn phải quyết định xem bạn muốn sử dụng liên kết sớm hay muộn của các biến đối tượng.
Ràng buộc sớm
Ràng buộc giữa biến đối tượng và đối tượng diễn ra khi ứng dụng được biên dịch.
Điều này dẫn đến hiệu suất tốt hơn so với khi liên kết diễn ra khi ứng dụng được chạy (liên kết muộn).
Nếu bạn muốn tạo một ràng buộc sớm, bạn phải đặt một tham chiếu đến thư viện đối tượng “ngoại lai” mà bạn muốn sử dụng.
Điều này được thực hiện từ VBE bằng cách sử dụng menu Tools, References …. Khi một VBProject có tham chiếu đến thư viện đối tượng, bạn có thể khai báo các biến đối tượng cụ thể (ví dụ: Dim oDoc As Word.Document). Điều này cũng sẽ giúp lập trình các “đối tượng ngoại lai” dễ dàng hơn vì VBE sẽ hiển thị cùng một trợ giúp lập trình liên quan đến các thuộc tính, phương thức và sự kiện mà nó hiển thị cho các đối tượng thuộc ứng dụng bạn đang làm việc (VBE đã tự động thêm tham khảo trước ứng dụng này).
Đây là một ví dụ mã chung hiển thị lỗi tự động hóa vba:
Sub OLEAutomationEarlyBinding() ' replace xxx with one of the following: ' Access, Excel, Outlook, PowerPoint or Word Dim oApp As xxx.Application ' early binding Dim oDoc As xxx.Document ' Excel.Workbook, Outlook.MailItem, PowerPoint.Presentation, Word.Document On Error Resume Next ' ignore errors Set oApp = GetObject(, "xxx.Application") ' reference an existing application instance If oApp Is Nothing Then ' no existing application is running Set oApp = New xxx.Application ' create a new application instance End If On Error GoTo 0 ' resume normal error handling If oApp Is Nothing Then ' not able to create the application MsgBox "The application is not available!", vbExclamation End If With oApp .Visible = True ' make the application object visible ' at this point the application is visible ' do something depending on the application... Set oDoc = .Documents.Open("c:\foldername\filename.doc") ' open a document ' ... oDoc.Close True ' close and save the document .Quit ' close the application End With Set oDoc = Nothing ' free memory Set oApp = Nothing ' free memory End Sub
Ràng buộc muộn
Ràng buộc giữa biến đối tượng và đối tượng diễn ra khi ứng dụng được chạy.
Điều này dẫn đến hiệu suất chậm hơn so với khi liên kết diễn ra khi ứng dụng được biên dịch (liên kết sớm).
Nếu bạn không thêm tham chiếu đến thư viện đối tượng thuộc ứng dụng “nước ngoài”, bạn phải khai báo các biến đối tượng chung (ví dụ: Dim oDoc As Object). Điều này sẽ gây khó khăn hơn cho việc lập trình các “đối tượng ngoại lai” vì VBE sẽ không hiển thị cùng một trợ giúp lập trình liên quan đến các thuộc tính, phương thức và sự kiện mà nó hiển thị cho các đối tượng thuộc ứng dụng bạn đang làm việc.
Đây là một ví dụ mã chung:
Sub OLEAutomationLateBinding() ' replace xxx with one of the following: ' Access, Excel, Outlook, PowerPoint or Word Dim oApp As Object ' late binding Dim oDoc As Object ' late binding On Error Resume Next ' ignore errors Set oApp = GetObject(, "xxx.Application") ' reference an existing application instance If oApp Is Nothing Then ' no existing application is running Set oApp = CreateObject("xxx.Application") ' create a new application instance End If On Error GoTo 0 ' resume normal error handling If oApp Is Nothing Then ' not able to create the application MsgBox "The application is not available!", vbExclamation End If With oApp .Visible = True ' make the application object visible ' at this point the application is visible ' do something depending on the application... Set oDoc = .Documents.Open("c:\foldername\filename.doc") ' open a document ' ... oDoc.Close True ' close and save the document .Quit ' close the application End With Set oDoc = Nothing ' free memory Set oApp = Nothing ' free memory End Sub