ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้

สรุป

เมื่อคุณใช้ตัวดำเนินการใหม่หรือCreateObjectฟังก์ชันใน Microsoft Visual Basic เมื่อต้องการสร้างอินสแตนซ์ของโปรแกรมประยุกต์ Microsoft Office คุณอาจได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

ข้อผิดพลาดรันไทม์ '429': คอมโพเนนต์ ActiveX ไม่สามารถสร้างออบเจ็กต์

ข้อผิดพลาดนี้เกิดขึ้นเมื่อวัตถุ Automation ร้องขอไม่สามารถสร้าง ด้วย COM ดัง นั้นจึงไม่พร้อมใช้งาน Visual Basic โดยทั่วไปจะมีดูข้อผิดพลาดบนเครื่องคอมพิวเตอร์บางเครื่องเท่านั้น

บทความนี้แสดงทิปสำหรับการแก้ไขปัญหาเพื่อช่วยให้คุณสามารถวินิจฉัย และแก้ไขปัญหาทั่วไปที่ทราบว่าทำให้เกิดข้อผิดพลาดนี้

ข้อมูลเพิ่มเติม

ซึ่งแตกต่างจากข้อผิดพลาดบางอย่างใน Visual Basic จะไม่ทำให้เกิดข้อผิดพลาด 429 หนึ่ง ปัญหานี้เกิดขึ้นเนื่องจาก มีข้อผิดพลาดในการกำหนดค่าโปรแกรมประยุกต์หรือระบบ หรือคอมโพเนนต์ขาดหายไป หรือเสียหาย ค้นหาสาเหตุแท้จริงจะเป็นเรื่องของการตัดความเป็นไปได้ ถ้าคุณพบข้อผิดพลาดนี้บนคอมพิวเตอร์แบบไคลเอ็นต์ มีหมายเลขของสิ่งที่คุณจะต้องทำเครื่องหมายเพื่อแยก และแก้ไขข้อผิดพลาดนี้

สินค้าในภายหลังให้คำแนะนำบางอย่างทางปฏิบัติสำหรับการแก้ไขปัญหาข้อผิดพลาดนี้เมื่อคุณทำงานกับโปรแกรมประยุกต์ของ Office บางส่วนของข้อมูลนี้อาจนำไปยังเซิร์ฟเวอร์ที่ไม่ใช่ Office COM ด้วย แต่บทความนี้สมมติว่า คุณกำลังพยายามที่จะให้ Microsoft Office

ตรวจสอบรหัส

แรกเพื่อเริ่มการค้นหาปัญหาในโค้ดอยู่ ก่อนที่คุณสามารถแก้ไขข้อผิดพลาด คุณจำเป็นต้องทราบตำแหน่งที่ข้อผิดพลาดเกิดขึ้น มีความพยายามที่จะจำกัดการค้นหาลงไปยังบรรทัดโค้ดบรรทัดเดียว

เมื่อคุณพบรหัสซึ่งไม่สามารถ ให้ลองทำสิ่งต่อไปนี้:

  • ตรวจสอบให้แน่ใจว่า โค้ดใช้สร้างวัตถุอย่างชัดเจน ปัญหาใด ๆ ได้ง่ายกว่าการจุด และทราบปัญหาคือ narrowed กับการดำเนินการเดียวกัน ตัวอย่างเช่น ไม่ทำสิ่งต่อไปนี้:

    Application.Documents.Add 'DON'T USE THIS!!

    หรือ:

    Dim oWordApp As New Word.Application 'DON'T USE THIS!!
    '... some other code
    oWordApp.Documents.Add

    ทั้งสองวิธีใช้สร้างออบเจ็กต์แบบไม่ชัดเจน Microsoft Word จะไม่เริ่มจนกว่าจะเรียกว่าตัวแปรอย่างน้อยหนึ่งครั้ง เนื่องจากไม่สามารถเรียกตัวแปรในส่วนต่าง ๆ ของโปรแกรม ซึ่งสามารถทำให้ปัญหายากต่อการแปล นอกจากนี้ จึงไม่ชัดเจนว่าปัญหานั้น ด้วยการสร้างแอพลิเคชันวัตถุหรือวัตถุในเอกสาร

    แทน โทรหาอย่างชัดเจนในการสร้างวัตถุแต่ละชิ้นแยกต่างหาก:

    Dim oWordApp As Word.Application
    Dim oDoc As Word.Document
    Set oWordApp = CreateObject("Word.Application")
    '... some other code
    Set oDoc = oWordApp.Documents.Add

    ซึ่งทำให้ง่ายต่อการแยกปัญหา และทำให้รหัสอ่านได้ง่ายขึ้น

  • เมื่อต้องการสร้างอินสแตนซ์ของโปรแกรมประยุกต์ Microsoft Office ใช้CreateObjectแทนที่จะสร้าง CreateObjectมากขึ้นแมปไปยังกระบวนการสร้างที่ใช้ โดยไคลเอนต์ Visual C++ ส่วนใหญ่ และอนุญาตให้มีการเปลี่ยนแปลงเป็นไปได้ของเซิร์ฟเวอร์ CLSID ระหว่างเวอร์ชัน สามารถใช้CreateObjectกับวัตถุแบบ ผูกล่วงหน้า และการ ผูกล่าช้า

  • ตรวจสอบว่า สายอักขระ ProgID ที่ส่งผ่านไปCreateObjectถูกต้อง และว่า เป็นเวอร์ชันที่เป็นอิสระต่อกัน (นั่นคือ ใช้ "Excel.Application" แทนที่เป็น "Excel.Application.8") ดังกล่าวอาจเป็นได้ว่า ระบบซึ่งไม่สามารถมีรุ่นเก่า หรือรุ่นใหม่กว่ารุ่นของ Microsoft Office กว่ารุ่นคุณระบุใน ProgID

  • เพื่อช่วยในการตรวจแก้จุดบกพร่องแอพลิเคชันที่ไม่สามารถเรียกใช้ในแบบ IDE ใช้คำสั่งErlจะรายงานหมายเลขบรรทัดของบรรทัดที่ล้มเหลว ตัวอย่างเช่น รหัสต่อไปนี้จะบอกให้คุณไม่สามารถสร้างวัตถุที่ทำงานอัตโนมัติ (Word หรือ Excel):

    Dim oWord As Word.Application
    Dim oExcel As Excel.Application

    On Error Goto err_handler

    1: Set oWord = CreateObject("Word.Application")
    2: Set oExcel = CreateObject("Excel.Application")

    ' ... some other code

    err_handler:
    MsgBox "The code failed at line " & Erl, vbCritical

    ใช้การรวมกันของกล่องข้อความและหมายเลขบรรทัดเพื่อติดตามข้อผิดพลาด

  • ลองใช้การผูกข้อมูลที่ล่าช้า (นั่นคือ Dim oWordApp เป็นวัตถุ) วัตถุที่ถูกผูกไว้ล่วงหน้าต้องมีอินเทอร์เฟซของตนเองเพื่อให้อินเทอร์เฟซระหว่างขอบเขตของกระบวนการ ถ้ามีปัญหา marshaling อินเทอร์เฟซแบบกำหนดเองระหว่างCreateObjectหรือสร้างคุณจะได้รับข้อผิดพลาด 429 วัตถุถูกผูกไว้ล่าช้าใช้ระบบกำหนดอินเทอร์เฟซแบบ (IDispatch) ที่ต้องใช้พร็อกซีแบบกำหนดเองเพื่อให้มีอินเทอร์เฟซ นี้ ลองใช้วัตถุถูกผูกไว้ล่าช้าเมื่อต้องการดูถ้าทำให้ความแตกต่าง

    ถ้าปัญหาเกิดขึ้นเฉพาะเมื่อวัตถุถูกผูกล่วงหน้า ปัญหากับแอพลิเคชันของเซิร์ฟเวอร์ และสามารถแก้ไขได้ ด้วยการติดตั้งแอพลิเคชันใหม่ (โปรดดูในภายหลัง) โดยทั่วไป

  • ถ้าคุณกำลังทำให้โดยอัตโนมัติจาก ASP หรือคอมโพเนนต์ MTS ใช้CreateObjectแทนServer.CreateObject() ใช้Server.CreateObjectจะสร้างอินสแตนซ์ของโปรแกรมประยุกต์ Office ภายใต้ข้อมูลประจำตัวของแพคเกจการ MTS ซึ่งเป็นที่ทราบว่าทำให้เกิดปัญหากับ Microsoft Office

ตรวจสอบเซิร์ฟเวอร์ Automation

ข้อผิดพลาดกับCreateObjectหรือสร้างสาเหตุทั่วไปส่วนใหญ่มีปัญหาเกี่ยวกับเซิร์ฟเวอร์แอพลิเคชันเอง โดยปกติแล้ว ปัญหาเหล่านี้จะ มีการตั้งค่าคอนฟิกการตั้งค่าของแอพลิเคชัน ต่อไปนี้เป็นบางรายการการตรวจสอบ:

  • ตรวจสอบ Microsoft Office ที่ติดตั้งอยู่บนคอมพิวเตอร์เฉพาะที่แอพลิเคชันที่คุณต้องการ Automate และตรวจสอบให้แน่ใจว่า คุณสามารถเริ่มการทำงานของแอพลิเคชันจากจุดเริ่มต้น และจากนั้น เรียกใช้กล่องโต้ตอบ ถ้าโปรแกรมไม่สามารถเริ่มต้นด้วยตนเอง จะไม่ทำงานผ่านระบบอัตโนมัติ

  • ลงทะเบียนโปรแกรมประยุกต์ ด้วยการพิมพ์เส้นทางไปยังเซิร์ฟเวอร์ในการเริ่มต้นใหม่ และจากนั้น เรียกใช้กล่องโต้ตอบ แล้ว ผนวก/RegServerไปยังจุดสิ้นสุดของบรรทัด กด'ตกลง' โดยไม่แจ้งเตือนนี้ควรเรียกใช้แอพลิเคชัน และสเตอร์ใหม่เป็นเซิร์ฟเวอร์ COM ถ้ามีปัญหากับรีจิสทรีคีย์ขาดหายไป ซึ่งโดยปกติต้อง

  • ตรวจสอบหมายเลข LocalServer32 ภายใต้ CLSID สำหรับแอพลิเคชันที่คุณต้องการ Automate ต้องแน่ใจว่า จะชี้ไปยังตำแหน่งที่ถูกต้องสำหรับโปรแกรมประยุกต์ และตรวจสอบว่า ชื่อเส้นทางที่อยู่ในรูปแบบเส้นทางสั้น (DOS 8.3) ในขณะที่ไม่มีความต้องการที่อยู่เซิร์ฟเวอร์ การลงทะเบียนโดยใช้ชื่อเส้นทางที่สั้นชื่อเส้นทางยาวที่มีช่องว่างฝังตัวได้ทราบว่าทำให้เกิดปัญหาในบางระบบ (ดูในภายหลัง)

    เมื่อต้องการตรวจสอบหมายเลขเส้นทางที่เก็บไว้สำหรับเซิร์ฟเวอร์ เริ่มตัวแก้ไขรีจิสทรีของ Windows โดยการพิมพ์regeditในการเริ่มต้น และจากนั้น เรียกใช้กล่องโต้ตอบ นำทางไปยังคีย์ HKEY_CLASSES_ROOT\Clsid ภายใต้คีย์นี้ คุณจะพบ Clsid ที่สำหรับเซิร์ฟเวอร์ automation ที่ลงทะเบียนบนระบบ โดยใช้ค่าในภายหลัง ค้นหาหมายเลขที่แสดงถึงโปรแกรมประยุกต์ Office ที่คุณต้องการ Automate และการตรวจสอบคีย์ของ LocalServer32 สำหรับเส้นทาง


    +========================+=========================================+
    | Office Server | CLSID Key |
    +========================+=========================================+
    | Access.Application | {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9} |
    +------------------------+-----------------------------------------+
    | Excel.Application | {00024500-0000-0000-C000-000000000046} |
    +------------------------+-----------------------------------------+
    | FrontPage.Application | {04DF1015-7007-11D1-83BC-006097ABE675} |
    +------------------------+-----------------------------------------+
    | Outlook.Application | {0006F03A-0000-0000-C000-000000000046} |
    +------------------------+-----------------------------------------+
    | PowerPoint.Application | {91493441-5A91-11CF-8700-00AA0060263B} |
    +------------------------+-----------------------------------------+
    | Word.Application | {000209FF-0000-0000-C000-000000000046} |
    +------------------------+-----------------------------------------+
    เส้นทางตรงกับตำแหน่งที่แท้จริงของแฟ้มได้อย่างไร โปรดทราบว่า ชื่อเส้นทางที่สั้นสามารถช่วยให้คุณจะเข้าใจว่า เส้นทางที่ถูกต้องเมื่อนั้นอาจไม่ ตัวอย่างเช่น ทั้ง Microsoft Office และ Microsoft Internet Explorer (ถ้าได้ติดตั้งในตำแหน่งที่ตั้งเริ่มต้น) จะมีเส้นทางสั้นที่คล้ายกับ "C:\PROGRA~1\MICROS~X\" โดย X เป็นตัวเลข ไม่ทันทีเห็นได้ชัดเจนว่า คุณกำลังดูที่จากชื่อเส้นทางที่สั้น

    คุณสามารถทดสอบว่า เส้นทางนั้นถูกต้องจริง ๆ โดยการคัดลอกค่าจากรีจิสทรี และวางกราฟิกดังกล่าวไว้ในส่วนเริ่มต้น และจากนั้นกล่องโต้ตอบการเรียกใช้ (เอาสวิตช์/Automationก่อนที่จะเรียกใช้แอพลิเคชัน) โปรแกรมประยุกต์เริ่มต้นเมื่อคุณเลือก'ตกลง'หรือไม่ ถ้าใช่ แล้วเซิร์ฟเวอร์ถูกลงทะเบียนอย่างถูกต้อง ถ้าไม่ คุณควรแทนค่าของคีย์ LocalServer32 มีพาธถูกต้อง (ใช้ชื่อเส้นทางที่สั้นถ้าเป็นไปได้)

  • ได้ทราบว่าปัญหาจะเกิดขึ้นเมื่อทำงานอัตโนมัติสำหรับ Word หรือ Excel ถ้าแม่แบบ Normal.dot (Word) หรือแฟ้ม Excel.xlb ทรัพยากร (Excel) เสียหาย เมื่อต้องการทดสอบถ้าเกิดความเสียหายของ ค้นหาฮาร์ดไดรฟ์ภายในเครื่องเพื่อค้นหาอินสแตนซ์ทั้งหมดของ Normal.dot หรือ *.xlb (โปรดสังเกตว่า ถ้าคุณกำลังเรียกใช้ Windows 2000, Windows NT หรือ Windows 95/98 มีการเปิดใช้งานโพรไฟล์ คุณอาจพบหลายสำเนาของแฟ้มเหล่านี้ หนึ่งสำหรับแต่ละโพรไฟล์ผู้ใช้บนระบบ) เป็นการชั่วคราวเปลี่ยนชื่อแฟ้ม Normal.dot หรือแฟ้ม *.xlb และเรียกใช้การทดสอบการทำงานอัตโนมัติของคุณใหม่ (Word และ Excel จะสร้างแฟ้มเหล่านี้ถ้าพวกเขาไม่พบ) ไม่รหัสเดี๋ยวนี้ทำงานอย่างไร ถ้าใช่ แล้วคุณเปลี่ยนชื่อแฟ้มควรถูกลบเนื่องจากมีความเสียหาย ถ้าไม่ ใช่ คุณควรเปลี่ยนชื่อเหล่านั้นกลับไปยังชื่อเดิมของพวกเขาเพื่อตั้งค่ากำหนดเองใด ๆ ที่ถูกบันทึกไว้ในแฟ้มเหล่านี้จะไม่สูญหาย

  • ถ้าคุณอยู่บน Windows NT, Windows 2000, Windows XP หรือระบบ Windows Server 2003 เรียกใช้แอพลิเคชันภายใต้บัญชีผู้ดูแล เซิร์ฟเวอร์ office ต้องใช้การเข้าถึงแบบอ่าน/เขียนไปยังรีจิสทรีและไดรฟ์ และอาจไม่ถูกต้องโหลดถ้าการตั้งค่าความปลอดภัยปัจจุบันของคุณปฏิเสธสิทธิ์การใช้งานนี้

การตรวจสอบระบบ

การตั้งค่าคอนฟิกระบบทำให้เกิดปัญหาเกี่ยวกับการสร้างเซิร์ฟเวอร์ COM ออกกระบวนงาน ต่อไปนี้คือ สิ่งที่การตรวจสอบในระบบที่เกิดข้อผิดพลาด:

  • ปัญหาเกิดขึ้นกับเซิร์ฟเวอร์ออกของกระบวนการใด ๆ หรือไม่ ถ้าคุณมีโปรแกรมประยุกต์ที่เพิ่งใช้เซิร์ฟเวอร์ COM ที่เฉพาะเจาะจง (เช่น Word), คุณควรจะทดสอบเซิร์ฟเวอร์ออกของกระบวนการอื่นเพื่อให้แน่ใจว่า ปัญหาไม่ได้ มีชั้น COM ตัวเอง ถ้าไม่มีเซิร์ฟเวอร์ COM ออกกระบวนสามารถดูได้บนระบบนั้น แล้วติดตั้งใหม่ของระบบ OLE แฟ้ม (ดูด้านล่าง) หรือจะต้องติดตั้งระบบปฏิบัติการใหม่เพื่อแก้ไขปัญหา

  • ตรวจสอบหมายเลขรุ่นของแฟ้มระบบ OLE ที่จัดการการดำเนินการอัตโนมัติ แฟ้มเหล่านี้โดยปกติจะถูกติดตั้งเป็นชุด และควรตรงกับหมายเลขการสร้าง ยูทิลิตี้การตั้งค่าการกำหนดค่าอย่างไม่ถูกต้องสามารถโดยไม่ได้ตั้งใจติดตั้งแฟ้มแยกต่างหาก สาเหตุของพวกเขากลายเป็นไม่ตรงกัน เมื่อต้องการหลีกเลี่ยงปัญหาเกี่ยวกับการทำงานอัตโนมัติ คุณควรตรวจสอบแฟ้มเพื่อให้แน่ใจว่า แฟ้มตรงกับรุ่น

    คุณจะพบแฟ้มทำงานอัตโนมัติในไดเรกทอรี Windows\System หรือ Winnt\System32 ต่อไปนี้คือ รายการของแฟ้มที่จะตรวจสอบ:


    +---------------+-------------+----------------+
    | File Name | Version | Date Modified |
    +---------------+-------------+----------------+
    | Asycfilt.dll | 2.40.4275 | March 08, 1999 |
    | Oleaut32.dll | 2.40.4275 | March 08, 1999 |
    | Olepro32.dll | 5.0.4275 | March 08, 1999 |
    | Stdole2.tlb | 2.40.4275 | March 08, 1999 |
    +---------------+-------------+----------------+
    ตรวจสอบรุ่นของแฟ้ม ด้วยการคลิกขวาที่แฟ้มใน Explorer และเลือกคุณสมบัติจากเมนูแบบผุดขึ้น ค่าสำคัญที่สุดคือ ตัวเลขที่สี่ครั้งล่าสุดของรุ่นของแฟ้ม (หมายเลขการสร้าง) และวันปรับเปลี่ยนล่าสุด คุณต้องการให้แน่ใจว่า ค่าเหล่านี้จะเหมือนกันสำหรับแฟ้มทั้งหมดที่ทำงานอัตโนมัติ

    โปรดทราบว่า หมายเลขรุ่นและวันที่ให้ไว้ข้างต้นเป็นตัวอย่างเท่านั้น ค่าของคุณอาจแตกต่างกัน สิ่งสำคัญควรมีค่าเหล่านี้ตรงกัน ไม่ใช่ตารางนี้

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

    290887 VBRun60sp6.exe ติดตั้งแฟ้มการรันไทม์ของ Visual Basic 6.0 SP6

  • Windows NT 4.0 มีปัญหารู้จักกับเซิร์ฟเวอร์ Automation ที่อาศัยอยู่ในโฟลเดอร์ที่ประกอบด้วยช่องว่างฝังตัวในชื่อ และ/หรือโฟลเดอร์อื่นที่มีอักขระ 8 ตัวแรกจะเหมือนกันคล้ายกับ การเริ่มต้น ตัวอย่างเช่น สนุกสนานใน C:\Program Files\SomeFolder เซิร์ฟเวอร์อาจล้มเหลวเมื่อต้องการเริ่มการทำงานในระหว่างการเรียกการ CreateObject ถ้ามีโฟลเดอร์อื่นบนระบบเรียกว่า C:\Program Stuff\SomeFolder สำหรับข้อมูลเพิ่มเติม ให้ดูที่บทความฐานข้อมูลองค์ความรู้ต่อไปนี้:สำหรับข้อมูลเพิ่มเติมเกี่ยวกับปัญหานี้และขั้นตอนในการแก้ปัญหา คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:

    บัก185126 : COM/OLE เซิร์ฟเวอร์ไม่เริ่มทำงานบน Windows NT 4.0

การติดตั้ง Microsoft Office

ถ้าไม่มีขั้นตอนก่อนหน้านี้ช่วยให้คุณแก้ปัญหา พิจารณาการถอนการติดตั้ง และการติดตั้ง Microsoft Office Microsoft ขอแนะนำให้ คุณถอนการติดตั้งรุ่นที่มีอยู่ก่อน และติดตั้งใหม่จากแผ่นดิสก์การติดตั้งแบบเดิมแล้ว

สำหรับรายชื่อทั้งหมดของสินค้าที่จะถูกลบออก โปรดดูบทความ Knowledge Base ต่อไปนี้:

219423 OFF2000: วิธีการที่จะเอา Microsoft Office 2000

158658 OFF97: วิธีการที่จะเอา Microsoft Office 97

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการแก้ไขปัญหาข้อผิดพลาด '429' คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:

240377 HOWTO: ประกัน Jet 3.5 ถูกติดตั้งอย่างถูกต้อง (ส่วนฉัน)
สำหรับข้อมูลล่าสุดและโค้ดที่เกี่ยวข้องกับ Microsoft Office Automation ตัวอย่าง โปรดดูเว็บไซต์สนับสนุนออนไลน์ของ Microsoft ที่:

http://support.microsoft.com/ofd

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ขยายทักษะของคุณ

สำรวจการฝึกอบรม >

รับฟีเจอร์ใหม่ก่อนใคร

เข้าร่วม Microsoft Insider >

ข้อมูลนี้เป็นประโยชน์หรือไม่

คุณพึงพอใจกับคุณภาพภาษาเพียงใด
สิ่งที่ส่งผลต่อประสบการณ์ใช้งานของคุณ

ขอบคุณสำหรับคำติชมของคุณ!

×