Version 1.1
If you have already purchased this Software, let me take a moment to thank you for being a loyal customer
You are entitled to free lifetime updates for ALL future builds
This documentation is to help you understand the Software and to give you a more meaningful insight into what it can do. Please go through the documentation and read it carefully · Basic to moderate VBA skills will be required
You will need the following Excel Version & Prerequisite to use this Software
No support is provided for customization or development of this Software
I haven't written a Progressbar for ages but after stumbling across a HTML5 CodePen by Stas Melnikov I simply had to write one for Excel in a similar style. Of course it would not as good as the HTML5 one as I am bound by the IE7 WebBrowser Control (lacking many Javascript & CSS commands) and I do not want to configure registry settings or use an IE Object. Anyhow, I think with the limitations I have, I have sort of done it justice
I have tried to emulate a kind of skipping technique, whereby for small periods of time the Bar appears to be stationary and then jumps up in small Percentages - this looks similar to the technique Stas employs for his demo
This Progressbar can be used with DoEvents or an alternative MyDoEvents to display the Percentage and Message of a Task until it is complete, after which it can Fade away or display a Complete Page with Message. I have added the Easing function to slow the rate of the Bar down as it reaches conclusion and the Workbook comes with many examples so you can get a feel as to what can be done including some 'real world' examples
Unzip the PopUp-Calendar.zip File and open Popup-Calendar.xlsm. Test the examples to see what PopUp Calendar can do. If you want, you can now start your own Project using the File or you can start from scratch by importing the Code Modules
To start from scratch, open a new Excel Workbook. Import the 3 Code Modules in the Zip File, 'frmCalendar.frm', 'Calendar.bas' and 'clCalendar.cls'. Add the Code below to a standard Code Module or the ThisWorkbook Code Module and run the Subroutine to display the PopUp Calendar:
Sub PopUpCalendar_Example() Call Calendar.Init Call Calendar.Popup End Sub
Of course, more than likely, you will need to trigger the Calendar when a user uses a Mouse Click in a Cell. To do this, use one of the Examples included with the Zip File. Here is a Modal PopUp Calendar triggered when a user selects Cell "C10" in a Worksheet (the Code should be added to a Worksheet Code Module):
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Application.Intersect(Range("C10"), Range(Target.Address)) Is Nothing Then Call Calendar.Init(FadeIn:=True, FadeOut:=True, FadeSpeed:=6) Call Calendar.Popup(LeftAdjustment:=-60, TopAdjustment:=10, DismissByEscape:=True) End If End Sub
You can make the Calendar 'popup' where you want it to, by adjusting the 'Left' and 'Top' adjustments in the Code. For example, to make the Calendar display closer to the bottom of the Cell vertically, you can adjust the 'TopAdjustment', setting it to 0. You can use the following Code when you call the Calendar.Popup() Subroutine like this:
Sub PopUpCalendar_Positioning_Example() Call Calendar.Init(FadeIn:=True, _ FadeOut:=True, _ FadeSpeed:=6, _ FormatActiveCell:="dd/mm/yyyy") Call Calendar.Popup(LeftAdjustment:=-60, _ TopAdjustment:=0, _ DismissByEscape:=True) End Sub
The Calendar positioning will stick if the Window of Excel is adjusted, Freeze Panes are used or if the Worksheet is Zoomed (depending on how you set the 'Left' and 'Top' Parameters, there may be slight difference when Zoomed, but I thik this is acceptable)
By default, the Calendar is NOT set to Fade in or out. You can tell it how you want it to display for any 4 combinations of Fading in or out. For example to Fade the Calendar in, but NOT fade it out you would use the following Code:
Sub PopUpCalendar_Fade_Example() Call Calendar.Init(FadeIn:=True, FadeOut:=False) Call Calendar.Popup End Sub
You can adjust the Fade speed (whole integer, default = 6) either faster or slower by setting the 'FadeSpeed' Parameter in the Code. I have made the Calendar fade in much slower by reducing the Parameter to '3' like this:
Sub PopUpCalendar_FadeSpeed_Example() Call Calendar.Init(FadeIn:=True, FadeOut:=False, FadeSpeed:=3) Call Calendar.Popup End Sub
The Calendar can be used as Modal (default = True), meaning that it can only be dismissed by the {ESC} Key if required or a Mouse Click on the Dialog or by selecting a Date or any of these combinations - a Mouse Click anywhere on a Cell in a Worksheet will NOT dismiss the Calendar
To force the user to only select a Date (allow different Calendar Months to be chosen), prevent any Dialog or Worksheet Cell Mouse Clicks, but still allow the {ESC} Key to dismiss the Dialog, you can use the followiing Code:
Sub PopUpCalendar_Modal_Example() Call Calendar.Init(FadeIn:=True, _ FadeOut:=True, _ FadeSpeed:=6) Call Calendar.Popup(LeftAdjustment:=-60, _ TopAdjustment:=10, _ DismissByEscape:=True, _ UserFormDismissByClick:=False) End Sub
Please Note: using CTRL+Break will pause or cause the Code to Break when using a Modal Dialog. I may prevent this in future builds but right now it does not affect the operation of the Calendar which continues just fine after pressing 'F5' or continue in the VBA Editor
The Calendar can also be used as Modeless, meaning that a user may select other Worksheet Cells to pick a Date from the Dialog or to allow the user to dismiss the Calendar if any Worksheet Cell is selected. This is a neat option as you can prevent all Mouse Clicks other than the very first Cell selection to trigger the Calendar. The user cannot dismiss the Calendar by a Mouse Click on the Dialog itself, but can select a Date. If they don't want to do the Date selection now, they simply make a Mouse Click anywhere in the Worksheet and the Calendar will be dismissed. You can of course combine this with allowing or NOT allowing the {ESC} Key to dismiss the Calendar for a very professional 'pop up' Calendar
Here is the Code for a Modeless Calendar ensuring NOTHING can dismiss the Dialog only a Mouse Click on the Worksheet or a valid Date selection (this must be added into a Worksheet Code Module):
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Application.Intersect(Range("C10"), Range(Target.Address)) Is Nothing Then If Not Calendar.Running Then Call Calendar.Init(FadeIn:=True, FadeOut:=True, FadeSpeed:=6) Call Calendar.Popup(LeftAdjustment:=-60, TopAdjustment:=10, DismissByEscape:=False, UserFormDismissByClick:=False, ModalDialog:=False) End If Else ' force an explicit exit Calendar.Running = False Unload frmCalendar End If End Sub
Please Note: using CTRL+Break will NOT pause or cause the Code to Break when using a Modeless Dialog
By default the Date is output as a Date Serial number ie. 43355, meaning 12 September, 2018. You can apply Cell Formatting in Excel, before you pick a Date from the Calendar or you can explicitly tell the Calendar what Format to use when outputting a Date. For example to use the Short Date Format "12/09/2018" you would use Code like this:
Sub PopUpCalendar_CellFormat_Example() Call Calendar.Init(FormatActiveCell:="dd/mm/yyyy") Call Calendar.Popup End Sub
You can use the {ESC} Key to dismiss the Calendar (default = True). To prevent the user using the {ESC} Key, set the 'DismissByEscape' Parameter in the Calendar.Popup() Subroutine to False like this:
Sub PopUpCalendar_EscapeKey_Example() Call Calendar.Init Call Calendar.Popup(DismissByEscape:=False) End Sub
When using a Modeless Calendar, the {ESC} Key will still close the Dialog by default when a user selects a different Cell than the trigger Cell. By explicitly setting the 'ModalDialog' Parameter in the Calendar.Popup() Subroutine to False will force the Code to 'Map' the {ESC} Key to a Function that will allow you to still capture {ESC} (if you want to when a user selects a different Cell - you don't have to), but will also allow you to instead, let the user dismiss the Dialog by selecting a different Cell. The best way to see this is to look at all of the Examples to help you understand what I mean and how different you can make the PopUp Calendar {ESC} Key behaviour
You can prevent a user from dismissing the Calendar by a Mouse Click (default = True) by setting the 'UserFormDismissByClick' Parameter in the Calendar.Popup() Subroutine to False like this:
Sub PopUpCalendar_PreventUserFormDismiss_Example() Call Calendar.Init Call Calendar.Popup(UserFormDismissByClick:=False) End Sub
You can change the Calendar Month using the tiny arrows on the Calendar. The left arrow will give display the previous Month and the right arrow will display the next Month
By default the Month Format on the Calendar means that the Month and Year are displayed like this 'September 2018'. To change this to a shorter Month and Year ie. 'Sep 19', you can use the following Code:
Sub PopUpCalendar_MonthFormat_Example() Call Calendar.Init(MonthFormat:="mmm yy") Call Calendar.Popup End Sub
The Calendar limitations are that it cannot be scaled, the Calendar Months cannot be changed into a different language and the Weekends are set to Saturday/Sunday. The Calendar uses an Image pre-loaded into the UserForm. Some parts of the Image are used as the Text for the Calendar Months and the Weekends are also pre-set. The current Calendar image and all of the UserForm Controls are at 67%. I do have a working UserForm scaled to 75% available on request if you need a slightly larger Calendar. If you have purchased the PopUp Calendar Software, you can request this from via my Facebook Page
I may address some of these points in future builds, but it is not for discussion here or via Support
You can specifiy the Cell for the Calendar to 'popup'. Here I created a simple demo whereby the user can select a Date if they click on Cell "D5"
The File includes a licensing Worksheet, showing the latest Version number and the 5 example Worksheets that contain Code for each of the Popup Calendar demos
The UserForm has a single Image loaded as a Picture. Part of the Image is set to a distinct Colour (an off-black) which is then made invisible by the Code to get the nice 'popup' look. The UserForm contains 37 Label Controls for the Calendar Days, 2 more Label Controls for the Calendar Arrows and 1 more Lable Control for the Calendar Month
Here, I run through the 5 example Worksheets to demonstrate the Popup Calendar. Remember you can use the Calendar as a Modal Dialog or a Modeless Dialog. I prefer the Modeless Dialog, where the user can click any Cell to dismiss the Calendar. I also turn off the ability to dismiss the Calendar by a Mouse Click anywhere on the UserForm, forcing the user to either select a Date, press the {ESC} Key or use a Mouse Click anywhere on the Worksheet to finish picking a Date
What is the Size in Memory when all of the Code Modules have been imported into Excel?
The File Size will be approx. 70KB - this is due to the BMP image which is required for UserForm Transparency
Please remember you have purchased very affordable Software and you have not paid for a full-time Software design agency - I am but one man. Occasionally I may help with small tweaks, but these requests will be put on a much lower priority due to their nature. You have not PAID for Support, Support is 100% optional and I provide it for your convenience, so please be patient, polite and respectful
You can find the version history in the Code Module for any Macro-enabled Software or read more information below. The latest Version is always shown first
01.09.2018 (Version 1) released