Online Reference

Home

Microsoft Reference
Knowledge Developer Database Internet Resource Forum
Access
DDE/OLE Function
ดาวน์โหลดคู่มือ

DDE Function

Access Function, ใช้ในการกำหนดค่าเริ่มต้นของ Dynamic data exchange (DDE) conversation กับโปรแกรมประยุกต์ เพื่อขอข้อมูล (item) ของสารสนเทศจากโปรแกรมนั้น และแสดงสารสนเทศในตัว control บนฟอร์มหรือรายงาน

ตัวอย่างเช่น สามารถใช้ฟังก์ชัน DDE ในคุณสมบัติ ControlSource ของ text box เพื่อแสดงข้อมูลจากเซลล์ที่ระบุใน Microsoft Excel

ไวยากรณ์

DDE(application, topic, item )

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

อากิวเมนต์ รายละเอียด
Application บังคับ, เป็น expression ของข้อความที่ระบุโปรแกรมประยุกต์ที่สามารถเข้าร่วมกับ DDE conversation โดยปกติอากิวเมนต์ application เป็นชื่อของไฟล์ .exe (ไม่มีส่วน .exe) สำหรับโปรแกรมประยุกต์บน Microsoft Windows เช่น Microsoft Excel ตัวอย่าง การกำหนดค่าเริ่มต้น DDE conversation กับ Microsoft Excel ให้พิมพ์ Excel เป็นอากิวเมนต์ application
topic บังคับ, เป็น expression ของข้อความที่เป็นชื่อของ topic ที่โปรแกรมประยุกต์รับรู้ อากิวเมนต์ topic มักจะเป็นไฟล์ document หรือไฟล์ข้อมูล ให้ตรวจสอบโปรแกรมประยุกต์ document ของรายการที่สามารถใช้ได้ของ topic
item บังคับ, เป็น expression ของข้อความที่เป็นชื่อของ item ข้อมูลที่รับรู้โดย application ให้ตรวจสอบโปรแกรมประยุกต์ document ของรายการที่สามารถใช้ได้ของ item

ลักษณะการประยุกต์
ฟังก์ชัน DDE จะกำหนดค่าเริ่มต้น DDE conversation ด้วยการระบุอากิวเมนต์ application และ topic และขอข้อมูลจาก item ถ้าสำเร็จฟังก์ชัน DDE จะส่งออกเป็นข้อความที่เก็บสารสนเทศที่ขอ

ถ้าเป็นการขอจาก Microsoft Excel อากิวเมนต์ item หมายถึงแถวและคอลัมน์ (ตำแหน่งของเซลล์) เช่น “R1C1” หรือชื่อ (name) ช่วงของเซลล์ ตามตัวอย่าง ฟังก์ชัน DDE ขอข้อมูลจากเซลล์ที่แถว 1 คอลัมน์ 1 ในเวิร์กชีต Microsoft Excel ให้กำหนด expression ที่คุณสมบัติ ControlSource ของตัว control แบบ text box

=DDE("Excel", "Sheet1", "R1C1")

การใช้ฟังก์ชัน DDE สามารถใช้ได้เฉพาะคุณสมบัติ ControlSource ของ text box, option group, check box, หรือ combo box ไม่สามารถใช้กับ Visual Basic

ถ้าใช้ฟังก์ชัน DDE แล้วตัว control จะเปลี่ยนเป็นแบบ อ่านอย่างเดียว (Read-only) ใน Form view และ Print Preview เช่น ถ้าใช้ฟังก์ชัน DDE ใน text box ข้อความใน text box จะไม่สามารถแก้ไขได้ การแก้ไขต้องแก้ในโปรแกรมประยุกต์นั้น เพราะตัว control เป็นแบบอ่านอย่างเดียว (Read-only) ใน Form view และ Print Preview การเปลี่ยนตัว control ให้ทำที่ Design View

จำนวนมากที่สุดของ DDE conversation ที่สามารถเปิดได้พร้อมกันขึ้นกับการทำงาน Microsoft Windows และขนาดหน่วยความจำของเครื่องคอมพิวเตอร์ที่ใช้ ถ้า conversation ไม่สามารถกำหนดการเริ่มต้นได้ เพราะ โปรแกรมประยุกต์ไม่ทำงาน, อากิวเมนต์ topic ไม่รับรู้ หรือถึงระดับจำนวนมากที่สุดของ conversation ฟังก์ชัน DDE จะส่งออกค่าว่าง

หมายเหตุ ถ้าโปรแกรมประยุกต์อื่นๆได้รับการคอนฟิกเป็น ignore DDE request ซึ่งเป็นผลให้ฟังก์ชัน DDE จะส่งออกค่าว่าง การกำหนดให้ ignore DDE request ให้คลิก Options บนเมนูคำสั่ง Tools แล้วแท๊บ Advance บน dialog box ของ Options จากเลือก Ignore DDE Request

Tip ถ้าคุณต้องการควบคุมโปรแกรมประยุกต์อ๊อบเจคอื่นๆจาก Microsoft Access ควรพิจารณาใช้ Automation

ตารางต่อไปนี้แสดงลักษณะของฟังก์ชัน DDE ในตัว control

ตัว control รายละเอียด
Text box อากิวเมนต์ item สามารถอ้างถึงข้อความหรือหมายเลข ถ้าอากิวเมนต์ item อ้างถึงสารสนเทศมากกว่า 1 ชิ้น เช่น ชื่อของช่วงในเวิร์กชีต Microsoft Excel ประกอบด้วยหลายเซลล์ ฟังก์ชัน DDE จะค่าเป็นเข้าถึงค่าแรก การใช้ฟังก์ชัน DDE กับ text box สามารถแสดงข้อมูลที่เก็บในเซลล์ของเวิร์กชีต
Combo box ฟังก์ชัน DDE จะแสดงค่าใน combo box ด้วยสารสนเทศที่อ้างถึงจากอากิวเมนต์ item แต่ไม่สามารถป้อนข้อมูลในช่องได้ การใช้ฟังก์ชัน DDE กับ combo box ใช้dารแสดงรายการที่ข้อมูลอยู่ในเวิร์กชีต Microsoft Excel
Option group คุณสมบัติ OptionValue ของแต่ละตัวเลือกใน Option group ได้รบการกำหนดค่าเป็นตัวเลข ตามปกติ ปุ่มแรกมีค่าเป็น 1, ปุ่มที่ 2 มีค่าเป็น 2 และต่อๆไป ตัวเลขที่ส่งออกโดยฟังก์ชัน DDE เป็นการหาค่าปุ่มที่ได้รับการเลือก

เช่น ฟังก์ชัน DDE ส่งออกค่าเป็น 2 แสดงว่าปุ่มที่ 2 ได้รับการเลือก ถ้าฟังก์ชันส่งค่าที่ไม่ตรงกับการตั้งค่าคุณสมบัติ OptionValue จะไม่มีปุ่มใดได้รับการเลือก ถ้าอากิวเมนต์ item อ้างถึงสารสนเทศมากกว่า 1 ค่า เช่น เป็นช่วงของเซลล์ใน Microsoft Excel ฟังก์ชัน DDE จะส่งออกค่าที่เข้าถึงค่าแรก

Check box ถ้าฟังก์ชัน DDE ส่งค่าเป็น 0 ปุ่ม check box จะเป็นช่องว่าง ถ้าฟังก์ชัสนส่งค่าไม่ใช่ 0 เช่น 1 หรือ –1 ช่องจะได้รับการเลือก ถ้าอากิวเมนต์ item อ้างถึงสารสนเทศมากกว่า 1 ค่า เช่น เป็นช่วงของเซลล์ใน Microsoft Excel ปุ่ม check box จะไม่สนับสนุน

ดูเพิ่มเติม

DDEExecute Statement, ฟังก์ชัน DDEInitiate, DDEPoke Statement, ฟังก์ชัน DDERequest, ฟังก์ชัน DDESend, DDETerminal Statement, DDETerminalAll Statement, คุณสมบัติ Enabled, คุณสมบัติ Locked

ตัวอย่าง

ตัวอย่างการใช้ฟังก์ชัน DDE ในการสร้างการเชื่อมกับ Microsoft Excel โดยวางค่าบางค่าลงในเซลล์ของแถวแรกของเวิร์กชีต และกราฟ ขั้นแรก ฟังก์ชัน DDEInitiate เปิดช่องเพื่อเริ่ม DDE conversation ขั้นต่อมา คำสั่ง DDEExecute Statement ส่งคำสั่ง Microsoft Excel เพื่อเปิดเวิร์กชีตใหม่ และฟังก์ชัน DDERequest จะถาม Microsoft Excel สำหรับชื่อเวิร์กชีตที่สร้างขึ้นใหม่ เมื่อช่องการติดต่อใหม่เปิดขึ้นคำสั่ง DDEPoke Statement จะส่งข้อมูลไปที่ Microsoft Excel เพื่อทำเป็นกราฟ ขั้นตอนสุดท้าย คำสั่ง DDETerminal Statement จะยกเลิกการเชื่อมของ DDE กับ Microsoft Excel และคำสั่ง DDETerminalAll Statement จะยกเลิกการเชื่อมของ DDE ที่ทำงานอยู่ทั้งหมด

Sub ExcelDDE()

  Dim intI As Integer, intChan1 As Integer
  Dim strTopics As String, strResp As String, strSheetName As String

  On Error Resume Next ' ตั้งค่า error handling
  ' สร้างการเชื่อม
  intChan1 = DDEInitiate("Excel", "System")

  ' ถ้าเกิดความผิดพลาด Excel จะไม่ทำงาน แล้ว Reset ความผิดพลาดและเรียก Excel ใหม่

  If Err Then
    Err = 0
    Shell "C:\Excel\Excel.exe", 1

    'ถ้าเกิดความผิดพลาดอีก ออกจาก Procedure
    If Err Then Exit Sub

    ' สร้างการเชื่อมกับ Excel
    intChan1 = DDEInitiate("Excel", "System")

  End If

  ' สร้างเวิร์กชีตใหม่
  DDEExecute intChan1, "[New(1)]"
  strTopics = DDERequest(intChan1, "Selection") ' ดึงรายการ topic , ชื่อเวิร์กชีต
  strSheetName = Left(strTopics, InStr(1, strTopics, "!") - 1)

  ' ยกเลิกการเชื่อม DDE
  DDETerminate intChan1

  ' สร้างการเชื่อมกับเวิร์กชีตใหม่
  intChan1 = DDEInitiate("Excel", strSheetName)

  'ดึงบางค่าลงในแถวแรก
  For intI = 1 To 10
    DDEPoke intChan1, "R1C" & intI, intI
  Next intI

  ' สร้างกราฟ
  DDEExecute intChan1, "[Select(""R1C1:R1C10"")][New(2,2)]"

  ' ยกเลิกการเชื่อม DDE ทั้งหมด
  DDETerminateAll

End Sub