GetObject (Hàm GetObject)

Áp dụng cho
Access cho Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Lưu ý

Hàm, phương pháp, đối tượng hoặc thuộc tính được mô tả trong chủ đề này bị tắt nếu Dịch vụ Biểu thức Microsoft Jet đang chạy ở chế độ hộp cát, điều này ngăn chặn việc đá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 đến một đối tượng được cung cấp bởi một cấu phần ActiveX.

Cú pháp

GetObject([pathname ] [, class ] )

Cú pháp hàm GetObject có các đối số sau:

Đối số Mô tả
tên đường dẫn Không bắt buộc. Variant (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 bỏ qua pathname , class là bắt buộc.
lớp Không bắt buộc. Variant (Chuỗi). Một chuỗi đại diện cho lớp của đối tượng.

Đối số lớpdùng cú pháp appname.objecttype và có các phần sau:

Phần Mô tả
tên ứng dụng Bắt buộc. Variant (Chuỗi). Tên của ứng dụng cung cấp đối tượng.
kiểu đối tượng Bắt buộc. Variant (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.

Dùng hàm GetObject để truy nhập đối tượng ActiveX từ một tệp và gán đối tượng đó cho một biến đối tượng. Sử dụng câu lệnh Set để gán đối tượng được 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, ứng dụng được liên kết với tên đường dẫn đã chỉ định sẽ khởi động và đối tượng trong tệp được chỉ định được kích hoạt.

Nếu tên đường dẫn là chuỗi độ dài bằng 0 (""), GetObject sẽ trả về một phiên bản đối tượng mới thuộc loại được chỉ định. Nếu bỏ qua đối số pathname , GetObject sẽ trả về một đối tượng hiện hoạt thuộc loại được chỉ định. Nếu không tồn tại đối tượng nào thuộc loại được chỉ định, sẽ xảy ra lỗi.

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à theo sau là 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 hướng dẫn sử dụng 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 tầng cho bản vẽ được lưu trữ trong một tệp. Bạn có thể sử dụng mã sau đây để kích hoạt một tầng 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 mà 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ụ: một bản vẽ có thể hỗ trợ ba loại đối tượng khác nhau: đối tượng Ứng dụng , đối tượng Vẽ và đối tượng Thanh công cụ , tất cả đều là một phần của cùng một tệp. Để chỉ rõ đối tượng nào trong tệp mà 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ụ, là FIGMENT tên của một ứng dụng vẽ và DRAWING là một trong các loại đối tượng mà ứng dụng 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 các 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 object 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ó một 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 với một 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 một tệp được tải, hãy sử dụng hàm CreateObject .

Nếu một đối tượng đã tự đăng ký là đối tượng bản thể hiện đơn, chỉ một bản thể hiện của đối tượng đó được tạo, bất kể CreateObject được thực thi bao nhiêu lần. Với đối tượng một bản thể, GetObject luôn trả về cùng một phiên bản khi được gọi với cú pháp chuỗi độ dài bằng không ("") và nó sẽ 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 lớp được tạo bằng Visual Basic.

Ví dụ

Ví dụ này sử dụng hàm GetObject để lấy 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 để hiển thị Excel, đóng Excel, v.v. Bằng cách sử dụng hai lệnh gọi API, quy trình DetectExcel Sub tìm kiếm Excel và nếu đang chạy, thủ tục này sẽ nhập vào Bảng Đối tượng Đang chạy. Lần đầu tiên gọi GetObject sẽ gây ra lỗi nếu Microsoft Excel chưa chạy. Trong ví dụ này, lỗi này khiến cờ ExcelWasNotRunning được đặt thành True. Lệnh gọi thứ hai đến GetObject xác định một tệp sẽ mở. Nếu Excel hiện không chạy, lệnh gọi thứ hai sẽ bắt đầu nó và trả về tham chiếu đến trang tính được thể hiện bởi tệp đã xác định, mytest.xls. Tệp phải tồn tại ở vị trí được chỉ định; nếu không thì lỗi Tự động hóa lỗi Visual Basic sẽ được tạo. Tiếp theo, mã ví dụ giúp hiển thị cả Excel và cửa sổ chứa trang tính đã xác định. 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 Thoát của đối tượng Application để đóng Excel. Nếu ứng dụng đang chạy, thì không có ứng dụng nào được thực hiện để đóng ứng dụng. Bản thân tham chiếu được giải phóng bằng cách đặt nó 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