Geek Documentation Logo

Msg

Version 1.2


Introduction


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

Requirements

You will need the following Excel Version & Prerequisite to use this Software

  1. Excel 2010, 2013 & 2016 (32bit or 64bit)
  2. Basic to moderate VBA skills
  3. Access to the VBOM (a setting in Excel) & Macro's must be enabled
  4. Windows PC · NOT a Mac!

No support is provided for customization or development of this Software






About Msg #back to top

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 Icon Spanner Image

Msg Success Image

Features include:

  • * Works with multiple Monitors, centering the Msg Dialog in the middle of the active Monitor
  • * Works in Windows 11 using Rounded Windows and Resized Windows
  • * Display 4 different types of Message Dialogs, success/info, critical error, warning and help
  • * Display a Message for a specific timeout in seconds
  • * Display a small Close Cross to dismiss the Dialog
  • * Use Icons, Images and Animated GIF's
  • * Features 39 Demo Dialog Boxes
  • * Improved Fade-In for the Lightbox
  • * Use Mapped Hover Buttons for Yes/No or Okay/Cancel Buttons that users can click
  • * Button Names and Captions can be changed along with the Widths
  • * Add Hyperlinks and HTML Formatting to your Messages
  • * Prevent the user dismissing the Dialog by clicking on the Lightbox
  • * Allow the Dialog to be dismissed by pressing the Escape Key
  • * Prevent the user dismissing the Dialog using the CTRL+Break Keypress combination
  • * Msg creates a Beautiful, fade-in lightbox effect
  • * Msg uses Embedded Base64 encoded images that can be loaded directly or from Files. These are then stored into memory
  • * The HTML, CSS & Javascript shows you how to:
    - prevent F5 and CTRL+F5 from being pressed
    - prevent the Right-click context menu from being displayed
    - prevent Text Selections for the Body
    - remove all scrollbars from a WebBrowser Control





Getting Started #back to top

The download File

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

Copy Msg into an Existing Project #back to top

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:

Msg Copy Into Project Image

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

Compressing Files #back to top

You can Compress your finished Files prior to distribution using VBA DecompilerMore a great little free tool

Configuration - Creating a Msg #back to top

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"
                            

Msg Success Example Image

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
                            

Msg Success Timeout Example Image

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?"
                            

Msg Help Example Image

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."


                            

Example Large Success Image

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
	
                            

Help Button Image

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
		
                            

Subscribe Avoid Named Arguments Image

Function Parameters #back to top

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
						

HTML & Tweaking Things in Msg #back to top

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:

Msg Success Tweak Font Size Image

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. \'

Loading Icons & Preloaders #back to top

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

Msg Base64 Encoded Icons #back to top

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

Use a Config Table #back to top

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):

Fig 1.

Msg Config Table

Fig 2.

Msg Config Table2

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		
                            

Developer Tweaks #back to top

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'
						

Screen Shots #back to top

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):

1. Success - Your request has been processed

Success Image

1.1 Success with a larger Font Size of '14px' - I like this one best!

Success Tweak Font Image

2. Warning - You must enter all required information

Warning Image

3. Critical Error - You have encountered a critical error

Error Image

4. Help - This is a help message for Msg

Help Image

Here is a non-standard sized Message Box without an Icon, with MessageAlignment 'Justify' using the Success Dialog:

Large Success Image

Here is the same Message Box with MessagePadding set to '24' and MessageBorderColour '#CCC':

Large Padded Border Success Image

5. Warning Dialog with Mapped Yes/No Buttons

Warning Mapped Buttons

6. Help Dialog with Bespoke Mapped Button

Help Bespoke Mapped Button

7. Success Dialog with Mapped Yes/No Buttons

Success Changes Mapped Buttons

8. Critical Error Dialog with Bespoke Yes/No Buttons

Error Mapped Buttons

9. Success Dialog with Bespoke OK Button

Success Bespoke Button

10. Help Dialog with Bespoke Button that will Timeout after 5 seconds

Help Process Request

11. Success Dialog with Bespoke HTML formatting for the Message

Success HTML Formatting

12. Help Dialog with Bespoke Zooey Preloader Spanner (Icon Position:=BottomRight, DialogHeight:=140)

Msg Preloader Zooey

13. Critical Error Dialog with Bespoke Rotator2 Preloader Circle (IconSize:=72, Icon Position:=BottomRight, DialogHeight:=140)

Msg Preloader Rotator2

14. Warning Dialog with Bespoke Infinity Preloader (IconSize:=128, IconPosition:=Center, DialogHeight:=140)

Msg Preloader Infinity

15. Help Dialog with Bespoke Leonardo Preloader (IconSize:=128, IconPosition:=CenterRight, DialogHeight:=140)

Msg Preloader Leonardo

16. Help Dialog with Bespoke Magnifier Preloader (IconSize:=96, IconPosition:=TopRight, DialogHeight:=140)

Msg Preloader Magnifier

17. Simple Icons - Spanner

Msg Icon Spanner

18. Simple Icons - Magnifier

Msg Icon Magnifier

19. Simple Icons - Quote

Msg Icon Quote

20. Simple Icons - Calendar

Msg Icon Calendar

21. Simple Icons - File

Msg Icon File

22. Simple Icons - Speech

Msg Icon Speech




Videos #back to top

Preloaders:



Tasks:






There are currently no frequently asked questions about this Software that cannot be answered via this documentation

Support #back to top

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

Support (limited) for my Software includes:

* Responding to questions or problems regarding the Software and its features
* Fixing valid (replicated) bugs and reported issues for the VERSION I HAVE WRITTEN

Software support does not include:

* Customization and installation services
* Support for third party software or ANY kind of development whatsoever

Before seeking support, please...

* Make sure your question is a valid Software Issue and not a customization request
* Make sure you have read through the documentation and any related video guides before asking support on how to accomplish a task
* Make sure to double check the Software FAQs or online documentation
* Ensure that you access to the VBOM is allowed and that Macros can run in Excel
* Make sure to provide 'proof of purchase' and state the name / version of the Software that you are having issues with when requesting support by Email or via Facebook

How to get Support

Contact Mark Kubiszyn on the Email address provided when you purchased the Software, including the Order Number
Contact Kubiszyn.co.uk via our Facebook Page - remember to be patient, if there has been an issue with your download, I will always respond within 48 hours and will Email you the File directly if neccessary or via Messanger. For other issues the response time may be considerably longer and I may choose to respond to specific questions only (as is my right), depending on what has been asked

Version History (Changelog) #back to top

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


Changelog

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