XL: Creating a PAUSE Button in Visual Basic for Applications

Last reviewed: December 1, 1997
Article ID: Q131847
The information in this article applies to:
  • Microsoft Excel for Windows, versions 5.0, 5.0a, 5.0c
  • Microsoft Excel for Windows 95, version 7.0
  • Microsoft Excel for the Macintosh, versions 5.0, 5.0a

SUMMARY

In Visual Basic, Applications Edition, there is no built-in equivalent for the MS Excel 4.0 PAUSE() macro function. The Visual Basic code in this article provides an alternative.

You might want to use this code to pause execution of your macro while a user enters data directly in a sheet or manipulates menus.

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 engineers 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 the Microsoft fee-based consulting line at (800) 936-5200. For more information about the support options available from Microsoft, please see the following page on the World Wide Web:

   http://www.microsoft.com/support/supportnet/refguide/default.asp

Microsoft Excel does not have a "Macro Paused" Toolbar that can be invoked by a single command. This is true even when you run an MS Excel 4.0 macro. For more information on creating a macro-paused toolbar within the MS Excel 4.0 macro language, please see the following article(s) in the Microsoft Knowledge Base:

   ARTICLE-ID: Q105543
   TITLE     : XL5: No Resume Button or Key Command for Paused .XLM Macro

The following Visual Basic code comprises two sub procedures that you can modify to create the effect of pausing a macro.

If you have a single procedure within which you need to pause execution until the user desires to resume execution, split your sub procedure into two halves. On the last line of the first half of the sub procedure, call the "First_Half" sub procedure. Within the "Second_Half" sub procedure, substitute the name of the sub procedure that is the second half of your original sub procedure on the line where the MsgBox is currently located.

   ' This Sub procedure should be called on the last line of your original 
   ' Sub procedure.
   Sub First_Half()

      ' Create a toolbar.
      Toolbars.Add "resume"
      
      ' Add the button to the toolbar.
      ' Note that if you are using Microsoft Excel version 5.0,
      ' comment out the "StatusBar:" argument of the Add method and remove
      ' the comma and line-continuation character after "Enabled:=True"
      Toolbars("resume").ToolbarButtons.Add Button:=102, _
         OnAction:="Second_Half", Pushed:=False, Enabled:=True, _
         StatusBar:="Click here to resume macro"
   
      ' Name the button.
      Toolbars("resume").ToolbarButtons(1).Name = "Resume Macro"

      ' Make sure the bar is not docked.
      Toolbars("resume").Position = xlFloating

      ' Position the bar midway between the left and right of the window.
      Toolbars("resume").Left =  _
         (ActiveWindow.Width + Toolbars("resume").Width)/ 2

      ' Position the bar midway between the top and bottom of the window.
      Toolbars("resume").Top =  _
         (ActiveWindow.Height + Toolbars("resume").height)/ 2

      ' Make sure the bar is showing.
      Toolbars("resume").Visible = True

   End Sub

   Sub Second_Half()
  
      ' Delete the toolbar.
      Toolbars("resume").Delete

      ' Insert the name of the second half of your procedure in place of 
      ' this message box.
      '
      ' NOTE: Any variables dimensioned in the first half of your
      ' procedure may lose their values before this sub procedure is       
      ' executed. You will need to be certain any variables used by the 
      ' procedure you name in place of this message box are dimensioned at 
      ' the Module level.
      MsgBox "after"

   End Sub

REFERENCES

For more information, see the Visual Basic User's Guide, Chapter 12, "Managing Toolbars and Toolbar buttons with Visual Basic"


Additional query words:
Keywords : kbcode kbprg PgmHowto
Version : WINDOWS: 5.0, 5.0c, 7.0; MACINTOSH: 5.0, 5.0a
Platform : MACINTOSH WINDOWS
Issue type : kbhowto


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: December 1, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.