Online Reference

Home

Microsoft Reference
Knowledge Developer Database Internet Resource Forum
VBA
Array Function
ดาวน์โหลดคู่มือ

GetObject Function

VBA Function, ส่งออกค่าเป็นการอ้างอิงอ๊อบเจค ActiveX จากไฟล์

ไวยากรณ์

GetObject([pathname] [,class] )

อากิวเมนต์ของฟังก์ชัน GetObject มีรายละเอียด คือ

ส่วน รายละเอียด
pathname ไม่บังคับ, เป็นประเภทข้อมูล Variant (String), ที่ระบุพาร์ทและชื่อของไฟล์ที่เก็บอ๊อบเจคที่ต้องดึงออกมา ถ้าไม่กำหนด pathname จะต้องกำหนด class
class ไม่บังคับ, เป็นประเภทข้อมูล Variant (String), เป็นข้อความแสดง class ของอ๊อบเจค

อากิวเมนต์ class ใช้ไวยากรณ์ appname.objectivetype มีรายละเอียดของส่วน คือ

ส่วน รายละเอียด
appname บังคับ, เป็นประเภทข้อมูล Variant (String), เป็นชื่อโปรแกรมประยุกต์ที่ให้อ๊อบเจค
objectivetype บังคับ, เป็นประเภทข้อมูล Variant (String), เป็นประเภทหรือ class ของอ๊อบเจคที่ต้องการสร้าง

ลักษณะการประยุกต์

ฟังก์ชัน GetObject สามารถเข้าถึงอ๊อบเจค ActiveX จากไฟล์และกำหนดอ๊อบเจคให้กับตัวแปรอ๊อบเจค โดยใช้คำสั่ง Set statement ในการกำหนดอ๊อบเจคที่ส่งค่าออกโดยฟังก์ชัน GetObject ให้กับตัวแปรอ๊อบเจค เช่น

Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

เมื่อคำสั่งได้รับการประมวลผล การประยุกต์ที่เกี่ยวข้องจากการระบุ pathname จะเริ่มขึ้นและอ๊อบเจคในไฟล์ที่ระบุจะทำงาน

ถ้า pathname เป็น zero-length string (“”) ฟังก์ชัน GetObject จะส่งออกค่าอ๊อบเจคใหม่ตามประเภทที่ระบุ ถ้าไม่กำหนด pathname ฟังก์ชัน GetObject จะส่งออกเป็นอ๊อบเจคปัจจุบันตามประเภทที่ระบุ ถ้าไม่มีอ๊อบเจคตามประเภทที่ระบุจะเกิดความผิดพลาด

โปรแกรมประยุกต์บางโปรแกรมยิมยอมให้ทำงานกับบางส่วนของไฟล์ โดยการเพิ่มเครื่องหมายตกใจ (!) ต่อท้ายชื่อไฟล์และตามด้วยข้อความที่บอกส่วนของไฟล์ที่ต้องการ เช่น โปรแกรมเขียนแบบประเภทหลายชั้นที่เก็บในไฟล์ สมมติไฟล์ชื่อ SCHEMA.CAD

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

ถ้าไม่มีการระบุ class ของอ๊อบเจค การค้นหาและการทำงานกับโปรแกรมประยุกต์จะเริ่มต้นโดยอัตโนมัติ ตามชื่อไฟล์ที่กำหนดให้ ไฟล์บางไฟล์มีหลาย class ซึ่งจะต้องกำหนดอากิวเมนต์ class

Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

FIGNENT เป็นชื่อของโปรแกรมประยุกต์ และ DRAWING เป็นชื่อประเภทอ๊อบเจคที่สนับสนุน

ถ้าเรียกอ๊อบเจคมาแล้ว การอ้างอิงในคำสั่งสามารถใช้ตัวแปรอ๊อบเจค เช่น ใช้คุณสมบัติและเมธอด กับตัวแปรอ๊อบเจคชื่อ MyObject

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

ดูเพิ่มเติม

ฟังก์ชัน CreateObject, Set Statement

ตัวอย่าง

ตัวอย่างการใช้ฟังก์ชัน GetObject เพื่ออ้างอิงเวิร์กชีตของ Microsoft Excel (MyXL) โดยใช้คุณสมบัติ Application ในการทำให้มองเห็น Microsoft Excel ปิดไฟล์ และอื่นๆ ให้ใช้การเรียกด้วย API calls คือ DetectExcel Sub procedure ในการมองหา Microsoft Excel และถ้าไฟล์ที่ระบุทำงานให้เข้าไปที่ Running Object Table ในการเรียกครั้งแรกถ้า Microsoft Excel ยังไม่ทำงานฟังก์ชัน GetObject จะเกิดความผิดพลาด ตามตัวอย่างความผิดพลาดจะทำให้ ExcelWasNotRunning flag ได้รับตั้งค่าเป็น True การเรียกครั้งที่สองฟังก์ชัน GetObject จะระบุไฟล์ที่ต้องการเปิด ถ้า Microsoft Excel ยังไม่ทำงานฟังก์ชัน GetObject จะทำการเริ่มต้นและส่งค่าอ้างอิงไปที่เวิร์กชีตที่แสดงด้วยการระบุชื่อไฟล์ ตามตัวอย่าง ไฟล์ชื่อ Mytest.txt ต้องมีจริงตามตำแหน่งที่ระบุ ถ้าเป็นอย่างอื่น Visual Basic จะแสดงค่าความผิดพลาด “Automation error” คำสั่งต่อไปเป็นการทำให้มองเห็น Microsoft Excel และ window ที่มีเวิร์กชีตที่ระบุ ตอนสุดท้ายถ้าไม่มี Microsoft Excel เวอร์ชันก่อนทำงาน คำสั่งใช้เมธอด Quit ของการประยุกต์ปิด Microsoft Excel ถ้าโปรแกรมประยุกต์ยังคงทำงาน การอ้างอิงจะทำการปล่อยโดยตั้งค่าเป็น Nothing

' ประกาศ routines ของ API
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 ' ตัวแปรอ๊อบเจคที่เก็บการอ้างอิง Microsoft Excel
  Dim ExcelWasNotRunning As Boolean ' Flag สำหรับการปล่อย
  'ทดสอบการมองเห็นถ้า Microsoft Excel กำลังทำงาน
  On Error Resume Next ' หน่วง error trapping

  ' ฟังก์ชัน Getobject เรียกโดยไม่มีอากิวเมนต์แรกเพื่อส่งการอ้างอิงของการประยุกต์
  ' ถ้าการประยุกต์ไม่ทำงานจะเกิดความผิดพลาด

  Set MyXL = Getobject(, "Excel.Application")

  If Err.Number <> 0 Then ExcelWasNotRunning = True

  Err.Clear ' กำจัดอ๊อบเจคที่ผิดพลาดกรณี เกิดความผิดพลาด
  ' ตรวจสอบ Microsoft Excel ถ้า Microsoft Excel กำลังทำงานนำเข้าที่ Running Object table
DetectExcel

  ' กำหนดตัวแปรอ๊อบเจค
  Set MyXL = Getobject("c:\vb4\MYTEST.XLS")

  ' แสดง Microsoft Excel ตลอดจนถึงคุณสมบัติ Application
  ' จากนั้นแสดง window ที่เก็บไฟล์ซึ่งใช้การอ้างอิงอ๊อบเจคของ MyXL
  MyXL.Application.Visible = True
  MyXL.Parent.Windows(1).Visible = True

  ' ให้ทำการควบคุมไฟล์

  ' ...

  ' ถ้าไฟล์ Microsoft Excel ที่เรียกไม่ได้ทำงานเมื่อเริ่มต้น ให้ปิดเมธอด Quit ที่คุณสมบัติ Application
  ' หมายเหตุ การออกจาก Microsoft Excel แถบข้อความจะกระพริบ
  ' และมีข้อความถามการบันทึกไฟล์ที่เรียกออกมา

  If ExcelWasNotRunning = True Then
    MyXL.Application.Quit
  End IF

  Set MyXL = Nothing ' ปล่อยการอ้างอิงจาก application และ spreadsheet.

End Sub

Sub DetectExcel()

  ' Procedure ค้นหา Excel ที่ทำงาน และทำการ registers
  Const WM_USER = 1024
  Dim hWnd As Long
  ' ถ้า Excel กำลังทำงานให้ API call ส่งค่าตัวดูแล
  hWnd = FindWindow("XLMAIN", 0)

  If hWnd = 0 Then

    ' 0 มีความหมาย Excel ไม่ทำงาน
    Exit Sub
  Else
    ' Excel กำลังทำงานให้ใช้ฟังก์ชัน SendMessage API เข้าสู่ Running Object Table.
    SendMessage hWnd, WM_USER + 18, 0, 0
  End If

End Sub