"Fredrik Wahlgren" <fredrik.p.wahlgren@mailbox.swipnet.se> wrote in message
news:eC5bWRPHFHA.1176@TK2MSFTNGP12.phx.gbl...
> "choice" <choice@discussions.microsoft.com> wrote in message
> news:0917B6C1-CB73-496F-8770-A3BC86E254B5@microsoft.com...
>> i have a macro that opens a webpage, 99.9% of the time it works, for some
>> reason this time the webpage did not open and i got a message that
>> says...Microsoft Excel is waiting for another application to complete an

> OLE
>> action.
>> is there any way to get around this or at least be able to save excel

> before
>> i close it?
>>
>> thanks in advance
>>

> This doesn't necessarily mean that your macro won't be able to open the
> webpage at some point. It's an OLE timeout. I don't know an easy way to
> change the default value to something higher. In C/C++ you can use the
> CoRegisterMessageFilter to avoid this message. Here's an article where
> this
> API call is used:
> http://www.adapdev.com/blogs/smccorm...ry,VS.NET.aspx


Hi Fredrik,

You can do the same thing in an Excel app like so:

Declare Function CoRegisterMessageFilter Lib "OLE32.DLL" _
(ByVal lFilterIn As Long, ByRef lPreviousFilter) As Long

Private mlPreviousFilter As Long

Sub Auto_Open()

CoRegisterMessageFilter 0&, mlPreviousFilter

''' Do your stuff here.

End Sub

Sub Auto_Close()
''' Restore the message filter.
CoRegisterMessageFilter mlPreviousFilter, 0&
End Sub

I use this all the time when my business logic is in a DLL and I'm
debugging into the DLL. Otherwise Excel times out in a manner exactly like
that described by the OP if I'm debugging for more than 30 seconds or so. It
works fine, but I don't fully understand why. I've never seen any value
other than zero returned to the mlPreviousFilter variable, so I don't know
what exactly is being unregistered and reregistered.

--
Rob Bovey, Excel MVP
Application Professionals
http://www.appspro.com/

* Take your Excel development skills to the next level.
* Professional Excel Development
http://www.appspro.com/Books/Books.htm