Lưu ý: Hàm, phương pháp, đối tượng hoặc thuộc tính được mô tả trong chủ đề này sẽ bị vô hiệu hóa nếu Dịch vụ Biểu thức Phản lực của Microsoft đang chạy trong chế độ hộp cát, điều này ngăn không cho đánh giá các biểu thức không an toàn tiềm ẩn. Để biết thêm thông tin về chế độ hộp cát, hãy tìm kiếm "chế độ hộp cát" trong Trợ giúp.
Trả về tham chiếu tới một đối tượng được cung cấp bởi một cấu phần ActiveX.
Cú pháp
GetObject([tên đường dẫn ] [, lớp ] )
Cú pháp hàm GetObject có các đối số sau đây:
Đối số |
Mô tả |
---|---|
tên đường dẫn |
Không bắt buộc. Biến _thể (Chuỗi). Đường dẫn và tên đầy đủ của tệp chứa đối tượng cần truy xuất. Nếu tên đường dẫn bị bỏ qua, bắt buộc phải có lớp. |
lớp |
Không bắt buộc. Biến _thể (Chuỗi). Một chuỗi thể hiện lớp của đối tượng. |
Tên lớptham đối dùng tên ứng dụng cú pháp.objecttype và có các phần sau:
Phần |
Mô tả |
---|---|
tên ứng dụng |
Bắt buộc. Biến _thể (Chuỗi). Tên của ứng dụng cung cấp các đối tượng. |
objecttype |
Bắt buộc. Biến _thể (Chuỗi). Loại hoặc lớp đối tượng cần tạo. |
Chú thích
Lưu ý: Các ví dụ sau thể hiện cách sử dụng hàm này trong mô-đun Visual Basic for Applications (VBA). Để biết thêm thông tin về cách làm việc với VBA, chọn Tham khảo dành cho Nhà phát triển trong danh sách thả xuống cạnh Tìm kiếm, rồi nhập một hoặc nhiều từ vào hộp tìm kiếm.
Sử dụng hàm GetObject để truy nhập một đối tượng ActiveX từ tệp và gán đối tượng cho đối tượng biến số đối tượng. Sử dụng câu lệnh Set để gán đối tượng do GetObject trả về cho biến đối tượng. Ví dụ:
Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")
Khi mã này được thực thi, các ứng dụng liên kết với tên đường dẫn được chỉ định được bắt đầu và các đối tượng trong các tập tin được chỉ định được kích hoạt.
Nếu pathname là chuỗi có độ dài bằng 0 (""), GetObject sẽ trả về một phiên bản đối tượng mới của kiểu đã xác định. Nếu bỏ qua đối số pathname , GetObject trả về một đối tượng hiện hoạt của kiểu đã xác định. Nếu không tồn tại đối tượng nào của loại được chỉ định, lỗi sẽ xảy ra.
Một số ứng dụng cho phép bạn kích hoạt một phần của tệp. Thêm dấu chấm than (!) vào cuối tên tệp và làm theo dấu chấm than đó bằng một chuỗi xác định phần tệp bạn muốn kích hoạt. Để biết thông tin về cách tạo chuỗi này, hãy xem tài liệu dành cho ứng dụng đã tạo đối tượng.
Ví dụ: trong ứng dụng vẽ, bạn có thể có nhiều lớp cho bản vẽ được lưu trữ trong tệp. Bạn có thể sử dụng mã sau đây để kích hoạt một lớp trong một bản vẽ có tên là SCHEMA.CAD:
Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")
Nếu bạn không chỉ định lớp của đối tượng, Tự động hóa sẽ xác định ứng dụng cần khởi động và đối tượng cần kích hoạt, dựa trên tên tệp bạn cung cấp. Tuy nhiên, một số tệp có thể hỗ trợ nhiều lớp đối tượng. Ví dụ: bản vẽ có thể hỗ trợ ba loại đối tượng khác nhau: đối tượng Application , đối tượng Vẽ và đối tượng Toolbar , tất cả đều là một phần của cùng một tệp. Để xác định đối tượng nào trong tệp bạn muốn kích hoạt, hãy sử dụng tham đối lớp tùy chọn. Ví dụ:
Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", _
"FIGMENT.DRAWING")
Trong ví dụ này, FIGMENT là tên của ứng dụng vẽ và DRAWING là một trong các kiểu đối tượng mà ứng dụng này hỗ trợ.
Sau khi một đối tượng được kích hoạt, bạn tham chiếu đối tượng đó trong mã bằng cách sử dụng biến đối tượng mà bạn xác định. Trong ví dụ trước, bạn truy nhập vào thuộc tính và phương pháp của đối tượng mới bằng cách sử dụng biến đối tượng MyObject. Ví dụ:
MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"
Lưu ý: Sử dụng hàm GetObject khi có phiên bản hiện tại của đối tượng hoặc nếu bạn muốn tạo đối tượng có tệp đã được tải. Nếu không có phiên bản hiện tại và bạn không muốn đối tượng bắt đầu bằng tệp được tải, hãy sử dụng hàm CreateObject .
Nếu một đối tượng đã đăng ký chính nó như một đối tượng mẫu đơn, chỉ có một bản thể hiện của đối tượng được tạo ra, bất kể đã bao nhiêu lần CreateObject được thực thi. Với một đối tượng mẫu đơn, GetObject luôn trả về cùng một phiên bản khi được gọi bằng cú pháp chuỗi độ dài bằng 0 ("") và nó gây ra lỗi nếu đối số tên đường dẫn bị bỏ qua. Bạn không thể sử dụng GetObject để lấy tham chiếu đến một lớp được tạo bằng Visual Basic.
Ví dụ
Ví dụ này sử dụng hàm GetObject để tham chiếu đến một trang tính Excel cụ thể (MyXL). Nó sử dụng thuộc tính Application của trang tính để làm cho Excel hiển thị, để đóng nó, v.v. Sử dụng hai lệnh gọi API, thủ tục DetectExcel Sub tìm kiếm Excel và nếu nó đang chạy, hãy nhập nó vào Bảng Đối tượng Đang chạy. Lệnh gọi đầu tiên đến GetObject sẽ gây ra lỗi nếu Microsoft Excel hiện chưa chạy. Trong ví dụ này, lỗi này khiến cờ ExcelWasNotRunning được đặt thành True. Cuộc gọi thứ hai đến GetObject sẽ xác định một tệp để mở. Nếu Excel hiện không chạy, cuộc gọi thứ hai sẽ bắt đầu cuộc gọi và trả về tham chiếu đến trang tính được thể hiện bằng tệp đã xác định, mytest.xls. Tệp phải tồn tại tại vị trí được chỉ định; nếu không, lỗi Tự động hóa lỗi Visual Basic sẽ được tạo ra. Tiếp theo, mã ví dụ làm cho cả Excel và cửa sổ chứa trang tính đã xác định đều hiển thị. Cuối cùng, nếu không có phiên bản Excel trước đó đang chạy, mã sẽ sử dụng phương pháp Quit của đối tượng Application để đóng Excel. Nếu ứng dụng đang chạy, không có nỗ lực nào được thực hiện để đóng ứng dụng. Bản thân tham chiếu được phát hành bằng cách đặt thành Không có gì.
' Declare necessary API routines:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
ByVal lpWindowName As Long) As Long
Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _
ByVal wParam as Long, _
ByVal lParam As Long) As Long
Sub GetExcel()
Dim MyXL As Object ' Variable to hold reference
' to Microsoft Excel.
Dim ExcelWasNotRunning As Boolean ' Flag for final release.
' Test to see if there is a copy of Microsoft Excel already running.
On Error Resume Next ' Defer error trapping.
' GetObject function called without the first argument returns a
' reference to an instance of the application. If the application isn't
' running, an error occurs.
Set MyXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear ' Clear Err object in case error occurred.
' Check for Microsoft Excel. If Microsoft Excel is running,
' enter it into the Running Object table.
DetectExcel
' Set the object variable to reference the file you want to see.
Set MyXL = GetObject("c:\vb4\MYTEST.XLS")
' Show Microsoft Excel through its Application property. Then
' show the actual window containing the file using the Windows
' collection of the MyXL object reference.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
Do manipulations of your file here.
' ...
' If this copy of Microsoft Excel was not running when you
' started, close it using the Application property's Quit method.
' Note that when you try to quit Microsoft Excel, the
' title bar blinks and a message is displayed asking if you
' want to save any loaded files.
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End IF
Set MyXL = Nothing ' Release reference to the
' application and spreadsheet.
End Sub
Sub DetectExcel()
' Procedure dectects a running Excel and registers it.
Const WM_USER = 1024
Dim hWnd As Long
' If Excel is running this API call returns its handle.
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then ' 0 means Excel not running.
Exit Sub
Else
' Excel is running so use the SendMessage API
' function to enter it in the Running Object Table.
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub