Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.

XL2000: Page Fault Occurs When Running a DDE Macro or Closing Windows


View products that this article applies to.

This article was previously published under Q213520

↑ Back to the top


Symptoms

When you run a Microsoft Visual Basic for Applications macro or procedure that uses Dynamic Data Exchange (DDE) commands, or you try to restart or shut down Microsoft Windows after running such a macro or procedure, one of the following error messages appears.

Microsoft Windows 95 or 98

This program has performed an illegal operation and will be shut down.
If the problem persists, contact the program vendor.
When you click Details, an error message similar to one of the following appears:
EXCEL caused an invalid page fault in module OLEAUT32.DLL at 0137:65349854.
-or-
EXCEL caused an invalid page fault in module EXCEL.EXE at 0137:302036d4.

Microsoft Windows NT

This Windows application cannot respond to the End Task request. It may be busy, waiting for a response from you, or it may have stopped executing.
-or-
An application error has occurred and an application error log is being generated.

EXCEL.exe
Exception access violation (0xc0000005),Address 0x30276e52.

Microsoft Windows NT 4.0 Service Pack 4 (SP4)

The instruction at "0x30210a99" referenced memory at "0x005b000d". The memory could not be "read".
Click OK to terminate the application.
Click Cancel to debug the application.

Microsoft Windows 2000

Ending program...Please wait.
Followed by:
This program is not responding.

↑ Back to the top


Cause

This problem occurs when you do the following:
  • You run Visual Basic code that opens more than one DDE channel to a program and does not properly terminate the open channels.

    -and-
  • You do either of the following:
    • You quit Microsoft Windows.

      -or-

    • You run the same procedure or another procedure that creates a DDE channel to the same program.

↑ Back to the top


Resolution

If you open a DDE channel, you must terminate the channel before you quit Microsoft Excel. To terminate a DDE channel, use the DDETerminate method, as in the following example
Application.DDETerminate <ChanNum>
				
where <ChanNum> is the channel number returned by the DDEInitiate method.

If you encounter this problem, restart Windows, and then edit the macro or procedure in Microsoft Excel. Insert the DDETerminate statement into the appropriate location in the code. For more information, see the sample macro in the "More Information" section of this article.

↑ Back to the top


Status

Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article.

↑ Back to the top


More information

Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. Microsoft support professionals can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific needs. If you have limited programming experience, you may want to contact a Microsoft Certified Partner or the Microsoft fee-based consulting line at (800) 936-5200. For more information about Microsoft Certified Partners, please visit the following Microsoft Web site: For more information about the support options that are available and about how to contact Microsoft, visit the following Microsoft Web site: The following macro creates two DDE sessions to Microsoft Excel, inserts a new workbook, and then terminates the DDE channels that it created.

To run this macro, follow these steps:
  1. Start Microsoft Excel 2000.
  2. In a new workbook, press ALT+F11 to start the Visual Basic Editor.
  3. On the Insert menu, click Module, and then type the following macro in the module sheet:
    Sub DDESessions()
    
        Dim LobjExcelApp as Object
        Dim LwbNewWB as Object
           ' Perform commands within loop two times.
            For i = 1 to 2
            ' Create an object to Microsoft Excel.
            Set LobjExcelApp = CreateObject("Excel.application")
            ' Create workbook object.
            Set LwbNewWB = LobjExcelApp.Workbooks.Add
            ' Get DDE channel to Microsoft Excel.
            LwChanNum1 = Application.DDEInitiate("Excel", "System")
            ' Insert new workbook.
            Application.DDEExecute LwChanNum1, "[New]"
            ' Quit workbook.
            Application.DDEExecute LwChanNum1, "[Quit()]"
            ' Terminate this DDE channel.
            Application.DDETerminate LwChanNum1
         Next i
         MsgBox "DDESessions is complete"
    
    End Sub
    					
  4. On the File menu, click Close and Return to Microsoft Excel.
  5. In the workbook, point to Macro on the Tools menu, and then click Macros.
  6. Click DDESessions, and then click Run.
  7. When the message box that indicates the macro is completed appears, click OK.

↑ Back to the top


References

For more information about creating DDE channels, in the Visual Basic Editor, click Microsoft Visual Basic Help on the Help menu, type DDEInitiate Method in the Office Assistant or the Answer Wizard, and then click Search to view the topic.

↑ Back to the top


Keywords: KB213520, kbpending, kberrmsg, kbbug

↑ Back to the top

Article Info
Article ID : 213520
Revision : 7
Created on : 11/23/2006
Published on : 11/23/2006
Exists online : False
Views : 284