วิธีการยกเลิกกล่องโต้ตอบที่แสดงขึ้น โดยมีโปรแกรมประยุกต์ Office โดย Visual Basic

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 259971 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

สรุป

เมื่อคุณกำลังอัตโนมัติโปรแกรมประยุกต์ Office จาก Visual Basic (VB), โปรแกรมประยุกต์ Office อาจแสดงกล่องโต้ตอบ กล่องโต้ตอบทำให้โปรแกรมประยุกต์ Visual Basic เพื่อที่ปรากฏขึ้นเพื่อ หยุดการตอบสนอง (หรือแฮง) ได้เนื่องจาก VB กำลังรออยู่กับกล่องโต้ตอบการถูกไล่ กล่องโต้ตอบต้องถูกไล่ก่อนที่โปรแกรมประยุกต์ Visual Basic ที่สามารถดำเนินการต่อไป

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

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

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

โปรแกรมประยุกต์ office ไม่ได้ถูกออกแบบมาสำหรับการดำเนินการทำงานอัตโนมัติ ดังนั้น โปรแกรมประยุกต์ที่ automates Office อาจบางครั้งพบกล่องโต้ตอบที่ปรากฏขึ้น โดยโปรแกรมประยุกต์ของ Office จากปกติทดสอบโปรแกรมประยุกต์ คุณสามารถกำหนดว่ากล่องโต้ตอบที่กล่องการเกิดขึ้น และเขียนรหัสของคุณเพื่อหลีกเลี่ยงการกล่องกล่องโต้ตอบเฉพาะที่โดยปกติ

แนะนำต่อไปนี้คือบางอย่างให้กลยุทธ์สำหรับการหลีกเลี่ยงกล่องโต้ตอบขณะอัตโนมัติ Office เป็นโปรแกรมประยุกต์:
  • ดูว่า คุณสมบัติหรือเมธอดที่คุณกำลังใช้ (ที่เป็นสาเหตุของกล่องโต้ตอบ) มีอาร์กิวเมนต์ที่ไม่จำเป็นซึ่งคุณสามารถส่งไป ในบางครั้ง ด้วยการส่งผ่านอาร์กิวเมนต์ทั้งหมดไปยังคุณสมบัติหรือเมธอด คุณสามารถหลีกเลี่ยงกล่องโต้ตอบ ตัวอย่าง ถ้าคุณกำลังใช้การOPENวิธีการเปิดสมุดงาน Excel และสมุดงานที่มีการรหัสผ่านป้องกัน แสดง Excel กล่องโต้ตอบที่ขอให้ผู้ใช้สามารถป้อนรหัสผ่านถ้าคุณไม่ใส่อาร์กิวเมนต์ของรหัสผ่านเมื่อโทรOPENวิธีการ เมื่อต้องการหลีกเลี่ยงการกล่องโต้ตอบ ใส่ค่าสำหรับการรหัสผ่าน:อาร์กิวเมนต์เมื่อโทรOPENวิธีการ ในทำนองเดียวกัน เมื่อใช้การปิดวิธีการปิดเอกสาร มักจะช่วยในการระบุSaveChangesอาร์กิวเมนต์เพื่อหลีกเลี่ยงการกล่องโต้ตอบที่ขอให้ผู้ใช้สามารถบันทึกการเปลี่ยนแปลงสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการระบุอาร์กิวเมนต์ใดพร้อมใช้งานสำหรับคุณสมบัติหรือเมธอดที่คุณกำลังเรียก คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
    222101วิธีการค้นหา และใช้เอกสารรุ่นวัตถุของ Office
  • study โมเดลวัตถุของโปรแกรมประยุกต์ของ Office เพื่อดูว่า อาจมีคุณสมบัติที่ป้องกันไม่ให้กล่องโต้ตอบบางอย่าง ตัวอย่างเช่น Excelโปรแกรมประยุกต์วัตถุได้AskToUpdateLinksและAlertBeforeOverwritingคุณสมบัติ
  • ตั้งค่านี้Application.DisplayAlertsคุณสมบัติ (Excel โครงการ Word) หรือการใช้Application.DoCmd.SetWarnings เท็จ(เข้าเท่านั้น) ให้ปิดจอแสดงผลของข้อความแจ้งเตือน กล่องโต้ตอบมากที่สุด แต่ไม่ทั้ง หมด สามารถถูก avoided โดยใช้การตั้งค่านี้
  • ตั้งค่านี้Application.FeatureInstallคุณสมบัติ (Office 2000 และรุ่นที่ใหม่กว่า) เพื่อจัดการการโต้ตอบ "ลักษณะการทำงานนี้ไม่ได้ติดตั้ง..." เป็นกล่องเมื่อคอมโพเนนต์ที่อาจไม่สามารถติดตั้งในระบบของผู้ใช้ การเข้าถึง
  • ใช้แบบในข้อผิดพลาดคำสั่งเพื่อหลีกเลี่ยงข้อความแสดงข้อผิดพลาดขณะทำงานที่อาจเกิด เช่นเมื่อพยายามตั้งค่านี้Application.ActivePrinterเมื่อมีโปรแกรมควบคุมเครื่องพิมพ์ถูกติดตั้งบนระบบของผู้ใช้
  • ทดสอบโปรแกรมประยุกต์ของคุณอย่างละเอียดเพื่อช่วย anticipate เมื่อกล่องโต้ตอบอาจเกิดขึ้น ตัวอย่างเช่น สมมติว่า คุณเรียกใช้การSaveAsวิธีการกำหนดโปรแกรมประยุกต์ Office บันทึกไปยังแฟ้ม ถ้าแฟ้มนั้นอยู่แล้ว กล่องโต้ตอบอาจปรากฏขึ้นขอการยืนยันการแทนแฟ้มที่มีอยู่ ถ้าคุณปรับเปลี่ยนรหัสของคุณเพื่อตรวจสอบแฟ้มก่อนการโทรศัพท์SaveAsวิธี คุณสามารถหลีกเลี่ยงความเป็นไปได้ของกล่องโต้ตอบที่ปรากฏขึ้น ตัวอย่างเช่น ถ้าแฟ้มนั้นอยู่แล้ว ลบออกโดยใช้การทำลายงบดุลก่อนการโทรศัพท์SaveAsวิธีการ
หมายเหตุ:แม้ว่าคุณใช้เทคนิคเหล่านี้ และการออกแบบโปรแกรมประยุกต์ของคุณเพื่อหลีกเลี่ยงการกล่องโต้ตอบอย่างรอบคอบ คุณอาจยังคงถูก faced กับสถานการณ์ที่ซึ่งไม่สามารถถูก avoided กล่องโต้ตอบ ด้วยวิธีการและคุณสมบัติที่มีการเปิดเผยในรูปแบบของวัตถุของโปรแกรมประยุกต์ Office In such situations, it might be necessary to programmatically dismiss a dialog box by simulating user input. The following demonstration illustrates how this can be accomplished with a Visual Basic Automation client.

Sample

The steps in this section demonstrate Automation of Microsoft Word to print a document. The Automation client calls thePrintOutmethod for the Wordเอกสารวัตถุ If the user's default printer is configured to print to the FILE port, then a call toPrintOutproduces a dialog box prompting the user to enter a file name. To determine if thePrintOutmethod causes this dialog box to appear, the Visual Basic Automation client uses aตัวจับเวลาcontrol to detect idle time after calling thePrintOutวิธีการ Prior to callingPrintOutกระบวนการตัวจับเวลาis enabled and set to fire in five seconds. WhenPrintOutcompletes, theตัวจับเวลาis disabled. Therefore, if thePrintOutmethod completes within five seconds, theตัวจับเวลาevent never occurs and no further action is taken. The document is printed and the code execution continues beyond thePrintOutวิธีการ However, if theตัวจับเวลาevent occurs within the five second interval, it is assumed that thePrintOutmethod has not completed and that the delay is caused by a dialog box waiting for user input. เมื่อการตัวจับเวลาevent occurs, the Automation client gives focus to Word and usesSendKeysto dismiss the dialog box.

หมายเหตุ:For demonstration purposes, this sample uses thePrintOutmethod in such a way that it displays a dialog box intentionally when it prints to a printer set to a FILE port. Please note that thePrintOutmethod has two arguments,OutputfileNameและPrintToFile, that you can provide to avoid this dialog box.

Additionally, when using this "timer" approach, you can customize the wait time to be greater or less than five seconds, as well as customize the keystrokes you send to the dialog box.

This demonstration consists of two Visual Basic projects:
  1. An ActiveX EXE that provides a Timer class used to detect a delay. The reason to use an ActiveX EXE for the Timer class is to run the Timer code in a separate process and, therefore, a separate thread. This makes it possible for the Timer class to raise an event during a suspended automation call.
  2. A Standard EXE that uses automation to Word and calls thePrintOutmethod to print a document. It uses the ActiveX EXE to detect a delay when calling thePrintOutวิธีการ
Create the ActiveX EXE Project
  1. Start Visual Basic and create an ActiveX EXE project. Class1 is created by default.
  2. ในการProjectเมนู คลิกเพื่อเลือกคุณสมบัติ, and then change the Project name toMyTimer.
  3. Copy and paste the following code into theClass1module:
    Option Explicit
    
    Public Event Timer()
    Private oForm1 As Form1
    
    Private Sub Class_Initialize()
        Set oForm1 = New Form1
        oForm1.Timer1.Enabled = False
    End Sub
    
    Private Sub Class_Terminate()
        Me.Enabled = False
        Unload oForm1
        Set oForm1 = Nothing
    End Sub
    
    Public Property Get Enabled() As Boolean
        Enabled = oForm1.Timer1.Enabled
    End Property
    
    Public Property Let Enabled(ByVal vNewValue As Boolean)
        oForm1.Timer1.Enabled = vNewValue
        If vNewValue = True Then
            Set oForm1.oClass1 = Me
        Else
            Set oForm1.oClass1 = Nothing
        End If
    End Property
    
    Public Property Get Interval() As Integer
        Interval = oForm1.Timer1.Interval
    End Property
    
    Public Property Let Interval(ByVal vNewValue As Integer)
        oForm1.Timer1.Interval = vNewValue
    End Property
    
    Friend Sub TimerEvent()
        RaiseEvent Timer
    End Sub
    					
  4. ในการProjectเมนู เลือกAdd Formto add a new Form to the project.
  5. เพิ่มคำตัวจับเวลาcontrol to the form.
  6. Copy and paste the following code into the code module for Form1:
    Option Explicit
    
    Public oClass1 As Class1
    
    Private Sub Timer1_Timer()
        oClass1.TimerEvent
    End Sub
    					
  7. Save this project in a new subfolder namedเซิร์ฟเวอร์:.
  8. ในการแฟ้ม:เมนู เลือกMake MyTimer.Exeto build and register the component.
Create the Automation Client
  1. สร้างโครงการ EXE มาตรฐานใหม่ใน Visual Basic Form1 จะถูกสร้างขึ้นตามค่าเริ่มต้น
  2. เพิ่มคำCommandButtoncontrol to the form.
  3. ในการProjectเมนู การเลือกอ้างอิง:. Add references to theMicrosoft Word 8.0 (or 9.0, or 10.0) Object Library, and toMyTimer.
  4. คัดลอก และวางรหัสต่อไปนี้กับโมดูลฟอร์ม:
    Option Explicit
    
    Private oWord As Word.Application
    Private strWordCaption As String
    Private WithEvents oMyTimer As MyTimer.Class1
    
    Private Sub Form_Load()
        'Create MyTimer object, and then disable it by default:
        Set oMyTimer = New MyTimer.Class1
        oMyTimer.Enabled = False
    End Sub
    
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        'Terminate MyTimer object when the form is closed:
        oMyTimer.Enabled = False
        Set oMyTimer = Nothing
    End Sub
    
    Private Sub Command1_Click()
        On Error GoTo ErrorHandler
        
        'Create a new Word instance and put text in the new document:
        Set oWord = CreateObject("Word.Application")
        oWord.Visible = True
        oWord.Documents.Add
        oWord.Selection.TypeText "Hello World!"
        
        'Prepare Timer to "watch out" for a delay in calling PrintOut:
        strWordCaption = GetWordCaption 'for use with AppActivate
        oMyTimer.Interval = 5000 'allow 5 second wait time
        oMyTimer.Enabled = True
            
        'Call the PrintOut method, which may prompt the user to select
        'an output file name if the default printer is set to FILE:
        oWord.PrintOut Background:=False
    
    Done:
        On Error Resume Next
        'Turn off Timer:
        oMyTimer.Enabled = False
        
        'Close document and quit the Word instance:
        oWord.ActiveDocument.Close SaveChanges:=False
        oWord.Quit
        Set oWord = Nothing
        Exit Sub
    ErrorHandler:
        Resume Done
    End Sub
    
    Private Sub oMyTimer_Timer()
    'If this event occurs, there was a delay in calling PrintOut.
    'You can assume that the delay is caused by a dialog box prompting
    'for an output file name because the user has the printer
    'configured to print to FILE. SendKeys is used to provide the
    'output file name and dismiss the dialog box.
        Dim strKeys As String
        
        On Error Resume Next
        
        'Make sure that Word has the focus before using SendKeys to it:
    
        AppActivate strWordCaption 'Set focus to Word.
        
        'Send keystrokes to enter the output file name:
        If Right$(App.Path, 1) = "\" Then
            strKeys = App.Path & "MyOutput.prn"
        Else
            strKeys = App.Path & "\MyOutput.prn"
        End If
        Kill strKeys 'make sure file does not already exist
        strKeys = strKeys & "~" '~ represents the OK button to dismiss dialog
        SendKeys strKeys, True
           
        'Disable MyTimer:
        oMyTimer.Enabled = False
    End Sub
    
    Private Function GetWordCaption() As String
    'Returns the Word Caption. For use with the AppActivate statement
        Dim s As String
        On Error Resume Next
        If Left$(oWord.Version, 1) = "8" Then
            'Word 97 logic:
            s = oWord.Caption
        Else
            'Word 2000 or 2002 logic:
            Err.Clear
            s = oWord.ActiveWindow.Caption
            If Err.Number = 0 Then 'no error
                s = s & " - " & oWord.Caption
            Else
                s = oWord.Caption
            End If
        End If
        GetWordCaption = s
    End Function
    					
  5. บันทึกโครงการนี้ในการตั้งชื่อโฟลเดอร์ย่อยใหม่ไคลเอ็นต์.
  6. กดแป้น F5 เพื่อเรียกใช้โครงการform1ปรากฏขึ้น
  7. คลิกCommand1ในแบบฟอร์ม นี้ automates Word เพิ่มเอกสารใหม่กับข้อความ และจากนั้น ส่งออกไปยังเครื่องพิมพ์ โดยใช้การงานพิมพ์วิธีการ คุณไม่เห็นกล่องโต้ตอบถ้ามีการกำหนดค่าเครื่องพิมพ์ของคุณในการพิมพ์ไปยังเครื่องพิมพ์
  8. ในแผงควบคุม Windows เปลี่ยนเครื่องพิมพ์เริ่มต้นของคุณเพื่อให้มีการกำหนดค่าการพิมพ์ไปยังพอร์ต FILE
  9. คลิกCommand1อีกครั้ง และโปรดสังเกตว่ากล่องโต้ตอบปรากฏขึ้นใน Word ยกเลิกกล่องโต้ตอบจะไม่ รอห้าวินาที และกล่องโต้ตอบเป็นทางการเขียนโปรแกรมไล่เมื่อนั้นตัวจับเวลาเหตุการณ์ที่เกิดขึ้น มีสร้างแฟ้มแสดงผลที่ชื่อ MyOutput.prn ในโฟลเดอร์ย่อยของไคลเอ็นต์
Microsoft ให้ตัวอย่างการเขียนโปรแกรมสำหรับภาพเท่านั้น โดยไม่มีการรับประกันแสดง หรือ อื่น รวม แต่ไม่จำกัดเพียงการ การรับประกันโดยนัยของสามารถเชิงพาณิชย์และ/หรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ บทความนี้อนุมานว่า คุณไม่คุ้นเคยกับภาษาการเขียนโปรแกรมที่มีการแสดงและเครื่องมือที่ใช้ในการสร้าง และขั้นตอนการตรวจแก้จุดบกพร่อง ผู้เชี่ยวชาญฝ่ายสนับสนุนของ Microsoft สามารถช่วยอธิบายฟังก์ชันการทำงานของกระบวนการเฉพาะ แต่พวกเขาจะปรับเปลี่ยนตัวอย่างเหล่านี้เพื่อให้มีเพิ่มฟังก์ชันการทำงาน หรือสร้างกระบวนการตามที่คุณต้องการไม่
ถ้าคุณได้รับการจำกัดประสบการณ์ในการเขียนโปรแกรม คุณอาจต้องติดต่อคู่ค้ารับรองของ Microsoft หรือคำแนะนำบริการของ Microsoft สำหรับข้อมูลเพิ่มเติม โปรดไปที่เว็บไซต์ของ Microsoft เหล่านี้:

Microsoft ที่คู่ค้า - รับรองhttps://partner.microsoft.com/global/30000104

บริการคำแนะนำของ Microsoft-http://support.microsoft.com/gp/advisoryservice

สำหรับข้อมูลเพิ่มเติม เกี่ยวกับตัวเลือกการสนับสนุนที่มีอยู่ และ เกี่ยวกับวิธีการติดต่อ Microsoft แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft:http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS

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

หากต้องการทราบข้อมูลเพิ่มเติม โปรดคลิกที่หมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base::
257757ข้อมูล: ข้อควรพิจารณาเกี่ยวกับสำหรับการดำเนินการอัตโนมัติฝั่งเซิร์ฟเวอร์ของ Office
226118OFF2000: เขียนโปรแกรมทรัพยากรสำหรับ Visual Basic สำหรับโปรแกรมประยุกต์
253235file: Offautmn.exe ถึง Office 97 และดำเนินการอัตโนมัติ 2000 และแสดงตัวอย่างรหัส
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการอัตโนมัติ Office แวะไปที่ศูนย์บริการการพัฒนาของ Office ที่เว็บไซต์ต่อไปนี้ของ Microsoft:
http://support.microsoft.com/ofd

คุณสมบัติ

หมายเลขบทความ (Article ID): 259971 - รีวิวครั้งสุดท้าย: 8 มกราคม 2554 - Revision: 2.0
ใช้กับ
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Keywords: 
kbautomation kbhowto kbprogramming kbmt KB259971 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:259971

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com