If you develop large apps, this routine can help you keep a count of calls to change the mousepointer. The routine, called MouseStack, keeps a stack of those calls and resets the pointer to the default when the stacks are equal or when a reset is forced.
Often, one routine sets the MousePointer to hourglass, then calls another routine that also sets it to hourglass, then back to default. However, you might not want it reset just yet. MouseStack() changes the pointer back only if the counts of calls to hourglass and default are equal, and/or the user calls MouseStack() with vbResetMouse to set the pointer to the default:
Public Enum MousePointers vbDefault = 0 'set pointer to default vbHourglass = 11 'set pointer to hourglass vbResetMouse = 99 'reset static variables, set pointer 'to defaultEnd EnumPublic Sub MouseStack(nMouseSetting As _ MousePointers) Static nHourglass As Integer Static nDefault As Integer ' Based on the setting entered in, 'increment the proper variable Select Case nMouseSetting Case vbHourglass ' 11 nHourglass = nHourglass + 1 Case vbDefault ' 0 nDefault = nDefault + 1 Case Else End Select ' If the variables are now equal, or ' a reset was called, reset the ' variables, and set the mouse ' pointer to the default If (nHourglass = nDefault) Or _ (nMouseSetting _ = vbResetMouse) Then nHourglass = 0 nDefault = 0 Screen.MousePointer = vbDefault Exit Sub End If ' If the difference is > 1, the ' pointer is already set to where it ' should be. Leave without setting ' pointer. If (Abs(nHourglass - nDefault) > _ 1) Then Exit Sub ' If one is ahead, set the ' mousepointer to it If (nHourglass > nDefault) Then Screen.MousePointer = vbHourglass Else Screen.MousePointer = vbDefault End IfEnd Sub