Version 1.2
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
Msg is a bespoke HTML/CSS/Javascript notification Message box with hover buttons, Icons & Preloaders for Excel to inform users of success/info, errors, warnings and help, featuring a lightbox overlay for Excel. You can display a Message that has a timeout and will disappear after a specific duration. Msg comes in 4 flavours, success/info, critical error, warning and help. Msg, Messages can be triggered from Buttons or Hyperlinks. Users can click anywhere within the LightBox, press Escape or click on the tiny white cross to close the Message. Msg can be used whilst a task is running using a Callback feature. Msg is written by Mark Kubiszyn using VBA to embed Icons, Images and animated GIF's into Memory which will follow the Workbook when distributed. The embedded Javascript/HTML/CSS Code was adapted from Code written in 2009 by Michael Leigeber http://www.leigeber.com/
Msg comes as a .ZIP archive, meaning that you need to extract the Files before using the Software. You get 2 main Files featuring 8 Preloaders and 10 Icons (or Images) that are embedded into the Msg Workbook - I also include any Files that are loaded into memory as opposed to Strings of Base64 data. The first File is the main 'Msg.xlsm' File used to Copy into your Project, or to test and develop as your finished Software. The second File is 'Msg - finished.xlsm' which has the Examples removed and is ready for deployment showing a single running Task
Open the 'Msg.xlsm' File and test all of the examples by clicking on the Hyperlinks in Column "B". Lots of examples are in the download File, including Dialogs with timeouts and Dialogs with Icons and Preloaders. Press ALT+F11 to enter the Code Editor and examine the Code. To use Msg you can start a Project from scratch using the 'Msg - finished.xlsm' deployment example, the actual Msg Workbook that you purchased or see the Copy Msg into an Existing Project Section for instructions on adding Msg into your own Projects
After unzipping the Msg.zip File (right-click->Extract Files...) !Important, make a Backup of Msg.xlsm Open both Msg.xlsm (or your Backup File) and your own Macro-enabled Project in the same instance of Excel (I am using a new Project called 'Test.xlsm'). Press ALT+F11 to enter the VBA Editor, Expand all visible Nodes and in the Project Explorer Window, drag the UserForm Code Modules, 'frmLightBox' and 'frmMsg' into your Project from the Msg.xlsm Project. Drag the 'Msg' and 'mdIcons' Code Modules into your Project:
Now select Msg.xlsm and click on the '1' Worksheet. Right-click on the '1' Tab and choose 'Move or Copy...'. In the 'To Book' Dropdown Combo, select your Project, choose 'Before Sheet' and select the first Sheet Name in your Project. !Important - DO NOT CHECK 'Create a Copy' - you need to 'MOVE' the '1' Worksheet otherwise the embedded Icons will not follow the Worksheet. Press the 'OK' Button
That's it, now you can add an Example to one of your Project Code Modules and run a Msg Dialog Box - you can even use the Install Base64 Icons Button if your Project resides in the same Folder as the Msg.xlsm File and the unzipped Base64.txt Files - have fun
You can Compress your finished Files prior to distribution using VBA DecompilerMore a great little free tool
Configuring Msg is straightforward. Msg requires one call at the beginning of your Subroutine to initialise the HTML/CSS/Javascript, default settings in memory and another call to display the actual Message Box or Dialog at another point in your Subroutine
The parameters that must be passed include 'Icon', 'Dialog', 'Caption', and 'Message'. There is also an optional 'Timeout' value that can be passed to automatically close the Message after a period of time ie. 2 seconds. Here is the Code to Initialise and Display a Success Message that the user can close by clicking on the Lightbox or the small Close cross:
' initialise Msg.Init Icon:=icoSuccess ' display the Msg Msg.Box Dialog:=Success, _ Caption:="Success", _ Message:="Your request has been processed"
Here is the Code to Initialise and Display a Success Message that automatically closes after 2 seconds - notice the 'Timeout:=2' added to the end of the Msg.Box() Function and that the Msg does not display the small Close cross
' initialise Msg.Init Icon:=icoSuccess ' display the Msg Msg.Box Dialog:=Success, _ Caption:="Success", _ Message:="Your request has been processed", _ Timeout:=2
Here is the Code to display a Help Message Dialog:
' initialise Msg.Init Icon:=icoHelp ' display the Msg Msg.Box Dialog:=Help, _ Caption:="Help", _ Message:="What do you want to do?"
You can display larger Messages with or without an Icon - here is the Code for a Success Dialog with a large Message that has a 'Justify' alignment. Notice that we specify the Dialog Height and Width for this example. You can mix up Text with HTML, so for line breaks I use '<\br />' tags:>
' initialise Msg.Init MessageAlignment:=AlignJustify, DialogHeight:=400, DialogWidth:=600 ' display the Msg Msg.Box Dialog:=Success, _ Caption:="Success", _ Message:="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec interdum metus at purus euismod malesuada. Cras tempor tempus bibendum. Duis at nisl lacus. Nulla a luctus magna, ut malesuada massa. Mauris in ligula sed ipsum maximus pharetra. Curabitur at risus iaculis, gravida turpis non, imperdiet lorem. Praesent fermentum suscipit accumsan. Donec fermentum mi volutpat risus ullamcorper, vel egestas eros aliquet. Vivamus eu ornare massa. In id ornare sapien. Vivamus eget dolor efficitur, sodales quam vitae, tempus elit. Duis fringilla nisi quis felis mollis consectetur. Ut elementum vestibulum sem, eget mattis urna hendrerit ac. Morbi vel sapien tincidunt, gravida sem eu, consectetur purus. Sed egestas urna id accumsan ultricies. Ut condimentum tincidunt est et porttitor." & _ "<\br /><\br />" & _ "In velit lectus, auctor nec aliquet a, varius et neque. Cras venenatis sit amet lectus a consequat. Proin suscipit malesuada placerat. Donec imperdiet lacus nunc, sed ultrices enim pellentesque feugiat. Nulla et libero sit amet neque luctus ultricies. Praesent dolor sem, dapibus vel euismod sed, volutpat vitae nisl. Etiam rhoncus eget lectus nec dignissim. Donec aliquam eu dui vehicula tincidunt."
Msg can display hover Buttons and capture the return result. It can also prevent the user dismissing the Dialog by clicking on the Lightbox. Here is the Code to do both using a Help Dialog with 'Yes' and 'No' Buttons (Yes, No and Cancel are all captured using the vbResult Variable):
' initialise Msg.Init ButtonType:=Help, _ YesButton:="Yes", _ YesCaption:="Yes", _ NoButton:="No", _ NoCaption:="No" ' display a Msg and capture the result of the button press Dim vbResult As VbMsgBoxResult vbResult = Msg.Box(Dialog:=Help, _ Caption:="Change Setting", _ Message:="Do you wish to accept the changes?", _ DismissByLightBoxClick:=False) If vbResult = vbYes Then MsgBox "You pressed the Yes button", vbInformation ElseIf vbResult = vbNo Then MsgBox "You pressed the No button", vbInformation ElseIf vbResult = vbCancel Then MsgBox "The Help Dialog was cancelled", vbInformation End If
You don't have to use the Named Arguments when calling the Init() and Box() Functions, you can just omit the Named Arguments using a comma and set all of the Parameters on a single line. This Code will also create a dynamic Hyperlink that when clicked will open the Website in the default Browser. Please Note: a Backslash '\' has been added before the '<\a' attribute so that you can see the Code below, this should be removed if Copying the Code below into your own Project:
' initialise Msg.Init Help, , , , , , , , , , , , , Help, "Add Me", , "Click to Subscribe to my mailing list", , , "64px" ' display a Msg and capture the result of the button press Dim vbResult As VbMsgBoxResult vbResult = Msg.Box(Help, "Subscribe", "Subscribe to: <\a href=""http://www.kubiszyn.co.uk/"" style=""color:#0563C1;"" target=""_blank"" title=""click me, I am a hyperlink"">www.kubiszyn.co.uk") If vbResult = vbYes Then MsgBox "You pressed the 'Yes please add me to the list' button", vbInformation End If
Here is a list of Parameters for the Init() and Box() Functions, (marked black) together with examples for each Parameter (where multiple examples are given, you should pass any single occurance as the Parameter):
Init() Optional Icon As IconType, icoSuccess, icoWarning, icoCriticalError, icoHelp, ldrPreloader, ldrGear - (depends on the Icon Name given to store in Project - see the Base64Table to see how you can store Icons & Preloaders) Optional IconPosition As IconPositionType, Center, TopLeft, TopRight, BottomLeft, BottomRight (default) CenterRight, CenterLeft - specifies the posistion of the Icon or Preloader Optional IconSize As Integer, 128 (default), 64, 96 - specifies the size of the Icon or Preloader Optional DialogWidth As Integer, 400 (default), 960 - specifies the width of the Msg Dialog Box Optional DialogHeight As Integer, 200 (default but 160 is a nice height to use too), 300, 400 - specifies the height of the Msg Dialog Box Optional DialogBackgroundColour As String, "#FFFFFF" (default) - specifies a HTML String to set the Background Colour of the Msg Dialog Box Optional DismissDialogUsingEscape As Boolean, False (default), True - specifies whether or not to allow the Msg Dialog Box to be dismissed when a user presses the Escape Button Optional MessageAlignment As TextAlignType, AlignLeft (default), AlignRight, AlignCenter, AlignJustify - specifies the alignment of the Message Optional MessageHeight As Integer, 120 (default) - specifies the height of the Message Optional MessagePadding As Integer, 6 (default) - specifies the padding around the Message Optional MessageBorderColour As String, "none" (default), "#000000" - specifies a HTML String to set the Border Colour of the Message Optional MessageBackgroundColour As String, "transparent" (default), "#000000" - specifies a HTML String to set the Background Colour of the Message Optional MessageVerticalScrollbar As Boolean, False (default), True - specifies whether or not to display a Vertical Scrollbar in the Message Optional ButtonType As MessageBoxType, Success, CriticalError, Warning, Help - specifies the Schema of the Button to display Optional YesButton As String, "Yes", "OK" - if passed, displays a Button with the passed String as its name Optional NoButton As String, "No", "Cancel" - if passed, displays a Button with the passed String as its name Optional YesCaption As String, "Yes", "Click to Subscribe to the Kubiszyn.co.uk mailing list" - if passed, displays a Caption when the Button is Hovered over Optional NoCaption As String, "No", "Click to Cancel the Dialog" - if passed, displays a Caption when the Button is Hovered over Optional ButtonTop As String, "10px" - specifies whereabouts the Button is placed Optional ButtonWidth As String, "64px" - specifies the Button width Optional ButtonHeight As String, "60px" - specifies the Button height Optional LineHeight As String, "60px" - specifies the height of each Text line in a Button Optional DisplayCloseCross As Boolean = True (default), False - whether or not to display the small Close Cross shown at the top right of the Msg Dialog Box
Box() ByVal Dialog As MessageBoxType, Success, CriticalError, Warning, Help - specifies the type of Msg Dialog that will be displayed ByVal Caption As String, "Success", "Error", "Warning", "Help" - specifies the Caption on the Msg Dialog Box Titlebar ByVal Message As String, "Your request has been processed" - specifies the Message that will be displayed Optional Timeout As Integer, 0, 2, 5 - specifies the amount of time that the Msg Dialog Box is displayed before it is closed Optional DismissByLightBoxClick As Boolean, True (default), False - whether or not to allow a user to dismiss a Msg Dialog Box by clicking anywhere on the Lightbox Optional Callback As Variant, "DoTask" (a Subroutine Name to be ran as a Msg Dialog Box is running) - specifies a Subroutine that can be run after displaying a Msg Dialog Box - the task will update the Msg Dialog Box during the running of the task
One of the things that you will probably want to do is to tweak the Font or Font Size. Msg gives you the ability to tweak a number of things by using 'span style' to change things like the Font Size when passing in your 'Title' or 'Message'. Anything you send in the Message Parameter sets the Pop Boxes 'innerHTML'. For example to change the Font for a Message use the following Code:
' display the Msg
Msg.Box Dialog:=Success, _
Caption:="Success", _
Message:="Your request has been processed"
Now you will see the a larger Font Size:
You can use HTML Tags like '<b>' Bold, '<u>' Underline or change the Colour using '<span style='color:Red'>Your request has been processed</span>'
If you would like to Add dynamic content ie. a Hyperlink without using the Link Pop Box then you can easily do this - remember that not everything can be set for the 'innerHTML' ie. Lists, here is the Code to change the Font Colour and add a Hyperlink - notice the use of the target='_blank' to open a new Window for the Link:
MessageText:="This is example content. You can change this content. You can add dynamic HTML content www.kubiszyn.co.uk"
Please Note: some characters need to be 'Slashed' out so that they will accepted by the Javascript - these include the ' (apostrophe) ie. \'
All Icons and Loaders are embedded into Sheet"1" or 'shtMsg' (Worksheet Code Module Name). This Sheet has a Table called 'Base64Table'. Default Icons and Preloaders (animations) have been added at the top of the Table. You can configure this Table to load from Base64 Encoded, embedded Text or to load the data from a File. To load a new Icon, you need to adjust the Table to specify the following:
' Base64Table Column 1 Icon or Loader Name icoSuccess, icoWarning, icoCriticalError, icoHelp, ldrGear, ldrRotator, ldrMagnifier - specifies a Name for the Icon or Preloader animation which will be added to the mdIcons Code Module as an Enum 'IconType' Column 2 UID 1, 2, 3 - specifies a unique ID for the Icon or Preloader animation - this is a Formula that generates the next whole Integer - if this Formula appears currupt after editing the Table, simply Copy down the first Formula or just number your Icons consecutively ie. 1, 2, 3 etc. Column 3 Load from File Y, N - specifies whether or not to load the data from a File or from the Table, this can be lower or upper case Column 4 Base64 Encoded Data or Filename (depends on Y/N for Load from File option) 'C:\Archive\- a_My Programming\- a_My Excel\Working\Msg\bar2.txt' - specifies the Base64 Encoded Text or a Filename including the full Filepath to a Text File containing the Base64 Encoded data - Please Note: this can be just a Filename, but the File has to be in the same Folder as the 'Msg' Workbook - for examples of Base64 Data Strings, see the next Section 'Msg Base64 Encoded Icons'
If an Error occurs the Code written to the 'mdIcons' Code Module will no longer include the Names of your Icons or Preloaders and you will recieve an Error when further compiling 'Msg'. An Error message will also be present in the 'mdIcons' Code Module. To rectify this you need to ensure everthing in the 'base64Table' is configured correctly. When making any major changes, please ensure that you backup 'Msg' first
Here are examples of Base64 Encoded Icons (these are the 4 main Icons used by Msg) - you can use www.base64image.org or Motobit (Icons) to Base64 Encode an image or Motobit (Web Images) for Web-based Images. Please Note: you need to leave these 4 by default in the Table, however after developing your Msg Project, you can completely remove the Table and use Sheet("1") as a normal Worksheet as all of the data is compressed and hidden within the Worksheet to travel with your Project - you should also remove all of the Code used to load Icons from the 'mdMsg' Code Module
' icoSuccess data:image/gif;base64,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 ' icoWarning data:image/gif;base64,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 ' icoCriticalError data:image/gif;base64,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 ' icoHelp data:image/gif;base64,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
When using the encoded data, please ensure that you add the relevant prefix for an image ie. for a 'png' encoded image, add: 'data:image/png;base64,/' (the last forward slash before the data is optional
If your encoded data is too large for the Table, you should load it from File. Once installed you do not have to keep reloading it - the data is compressed and encrypted into the Worksheet
You may wish to use a Table as a Config Table ie. Icon Number, Dialog Number, Caption and Message and refer to the Row that you want to populate 'Msg.Init()' and 'Msg.Box()' with. Here is the Code to do that (add 'Table1' in 'Sheet1' with the headers, Icon, Dialog, Caption and Message, then run the Code setting the Const to the Index number for the Table Row to pick the settings from, fig. 1). I have made a Table that you can pick the Icon Types and Dialog Types from using Data Validation (fig. 2):
Public Sub Example_Pick_Index4() Const Index As Long = 4 ' initialise Msg.Init Icon:=Worksheets("Sheet1").ListObjects("Table1").ListColumns("Icon").DataBodyRange(Index), _ IconPosition:=CenterRight, DialogHeight:=140 ' display the Msg Msg.Box Dialog:=Worksheets("Sheet1").ListObjects("Table1").ListColumns("Dialog").DataBodyRange(Index), _ Caption:=Worksheets("Sheet1").ListObjects("Table1").ListColumns("Caption").DataBodyRange(Index), _ Message:=Worksheets("Sheet1").ListObjects("Table1").ListColumns("Message").DataBodyRange(Index) End Sub
I have included a few settings that can be tweaked by developers. You can find these at the top of both UserForm Code Modules. You can tweak the Light Box Darkness, the Light Box Timer Speed and the Light Box Transparency Step. For example if you would like a slightly darker LightBox then you would adjust the following setting in the Msg UserForm Code Module from '60' to '80'
' // configurable vars for developers ' - use this to deepen the LightBox Colour effect ' default 0:=Lightest, 100:=Darkest Private Const intLightBoxDarkness As Integer = 80
When using the setting above you can also adjust the speed of the LightBox by tweaking the Transparency Step from '8' to '14'. Now the darker LightBox will also fade in at the same rate or slightly faster:
' - increase this if using a darker LightBoxOpacity to speed up the LightBox Fade ' ie. LightBoxOpacity = 80, intLightBoxTransparencyStep = 14 Private Const intLightBoxTransparencyStep As Integer = 14
If you prefer an even faster, smoother fade speed, you can also tweak the LightBox Timer Speed from '0.02' to '0.01':
' // configurable vars for developers ' - you can adjust this but ideally only between 0.01 -> 0.03 ' use the Transparency Step when using a darker LightBox Private Const dblLightBoxTimerSpeed As Double = '0.01'
There are 4 types of standard Msg Dialogs Boxes available. Here they are together with their respective standard Icons and Messages - MessageAlignment is 'AlignLeft', MessagePadding is standard and the IconPosition is displayed 'BottomRight' (having been designed to fit nicely in this position):
There are currently no frequently asked questions about this Software that cannot be answered via this documentation
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
16.12.2021 - Version 1.2. Fix for Windows 11 OS, for a Lightbox. The code detects the the OS Build Number >=22000 indicating Windows 11 or greater and then rounds the Window corners and adjusts the Windows Width & Height --- 02.06.2021 - Version 1.1.0. Following a Windows 10 update and Edge update the rendering of the Dialog fails. Full code inspection using RubberDuck did not make any difference. Also, this is not down to the ever changing VBE.dll file updated continuously by Microsoft. The fix involved rewriting some of the CSS/HTML used by Msg to create the Dialog including the 'z-index' states I updated the DOCTYPE to the latest modern approach. I have Modified some of the examples. The Code is also propogated to the minified version in the Zip Archive --- 15.03.2018 - Version 1.0.1. Fixed the 'ReleaseDC' 64bit declaration so instead of returning a 'LongPtr' it returns a 'Long'. Changes made to the License Text within the VBA Code Modules --- 23.02.2018 - Version 1.0 released. Please Note: this Project was formally known as 'Notify'. Msg has been modified with many new features and VBA Code changes and then released under a new License