====== Microsoft Excel - Macros - Window API - Window API Declarations ====== ' Window API Declarations ' These Declares MUST appear at the top of the code module, above and before any VBA procedures. 'Const HWND_BOTTOM = 1 Const SWP_NOSIZE = &H1 Const SWP_NOMOVE = &H2 Const SWP_NOACTIVATE = &H10 Const SWP_SHOWWINDOW = &H40 Public Const HWND_TOPMOST = -1 Public Const HWND_NOTOPMOST = -2 Public Const HWND_TOP = 0 Public Const HWND_BOTTOM = 1 ' http://www.tek-tips.com/faqs.cfm?fid=4699 ' ' Message boxes are always modal, which means that the underlying application (e.g. Excel) waits for a response from ' the User and does not allow any other interaction until one is given. ' By default they are application modal (they remain in front of all other windows belonging to the owning application ' but have no impact on other applications), but they may also be system modal (they remain in front of ALL other ' windows although they have no non-visual impact on applications other than the owning one). ' ' Use the Message Box facility directly, via the Windows API, instead of via the VBA interface. ' Using it is pretty much the same as using MsgBox, except that you have the opportunity to set some parameter values ' which are defaulted in the VBA interface, in particular the message box, although technically still modal, can be ' attached to any window, or none. If you do not attach it to your window, it will not restrict your User's interaction ' with the application. Private Declare Function MessageBox _ Lib "user32" Alias "MessageBoxA" _ (ByVal hwnd As Long, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal wType As Long) _ As Long ' Used to have XL be on top of all other windows. #If Win64 Then Public Declare PtrSafe Function SetWindowPos _ Lib "user32" ( _ ByVal hwnd As LongPtr, _ ByVal hwndInsertAfter As LongPtr, _ ByVal x As Long, _ ByVal y As Long, _ ByVal cx As Long, _ ByVal cy As Long, _ ByVal wFlags As Long) _ As Long #Else Public Declare Function SetWindowPos _ Lib "user32" ( _ ByVal hwnd As Long, _ ByVal hwndInsertAfter As Long, _ ByVal x As Long, _ ByVal y As Long, _ ByVal cx As Long, _ ByVal cy As Long, _ ByVal wFlags As Long) _ As Long #End If