Introduction.
My very first blog post on this website, published back in September 2006, was about the Command Button Animation method. I have used this technique in almost all of my projects since then. The animated response of command buttons to mouse movements gave the Forms a sense of life, making them feel interactive rather than rigid and boring.
The design involves creating a Command Button, along with a Rectangle control set with a shadow special effect, both placed manually. The animation itself is handled through Mouse_Move() event procedures written in the Form module, which call a common function to perform the animation.
If you haven’t read that post yet, I recommend reviewing it first to get a general understanding before continuing. [Click here to go to the earlier article.]
Now, let’s take this a step further and see how to create animated command buttons automatically, with their corresponding animation procedures written into the Form module, all at design time, with just a single click of a button.
Animated Button Creation Code.
With two VBA routines, we can do this very easily.
Open one of your databases.
Display the Standard VBA Module.
Create a new Standard Module (Insert -> Module).
Copy both the following Functions into the Standard Module and save the code:
Command Button Animation Code:
Public Function BAnimate(ByVal strForm As String, ByVal mode As Integer, ByVal lblName As String) '--------------------------------------------------------------------------- 'Author : a.p.r. pillai 'Date : July 1998 'Remarks: Animates the Command Button 'Rights : All Rights Reserved by www.msaccesstips.com '--------------------------------------------------------------------------- Dim Frm As Form, l As Long, t As Long On Error GoTo BAnimate_Err Set Frm = Forms(strForm) l = Frm.Controls(lblName & "Box").Left t = Frm.Controls(lblName & "Box").Top If (mode = 1) And (Frm.Controls(lblName & "Box").Visible = False) Then Frm.Controls(lblName & "Box").Visible = True Frm.Controls(lblName).Left = l - (0.0208 * 1440) Frm.Controls(lblName).Top = t - (0.0208 * 1440) Frm.Controls(lblName).FontWeight = 700 ElseIf (mode = 0) And (Frm.Controls(lblName & "Box").Visible = True) Then Frm.Controls(lblName & "Box").Visible = False Frm.Controls(lblName).Left = l Frm.Controls(lblName).Top = t Frm.Controls(lblName).FontWeight = 400 End If BAnimate_Exit: Exit Function BAnimate_Err: Err.Clear Resume BAnimate_Exit End Function
Animated Command Button Creation Code:
Public Function CreateButton(ByVal intSection As Integer, strName As String) '--------------------------------------------------------------------------- 'Author : a.p.r. pillai 'Date : Aug. 2000 'Remarks: Creates animated command button controls and Programs on a Form ' : at design time of the form. 'Rights : All Rights Reserved by www.msaccesstips.com '--------------------------------------------------------------------------- 'Program Parameter Values : intSection ' 0 = Form Detail Section ' 1 = Form Header Section ' 2 = Form Footer Section ' : strName 'Command Button Name Property Value 'The Name will be prefixed with the text 'cmd' 'Example: Edit will be modified as cmdEdit 'Sample Run : CreateButton 0,"Edit" 'Remarks : If more than one Form is opened in Design View then the ' : Command Button will be created on the first Form '--------------------------------------------------------------------------- Dim Frm As Form, Ctrl As Control, txt As String Dim vLeft As Long, vTop As Long, vWidth As Long, vHeight As Long Dim i As Long, dif As Double, x As Long, Y As Long, z Dim frmViewStatus As Integer, frmsCount As Integer, j As Integer Dim hfd As String On Error Resume Next i = 1440 dif = 0.0208 * i vLeft = 0.25 * i vTop = 0.0521 * i vWidth = 1.25 * i vHeight = 0.2375 * i frmsCount = Forms.Count - 1 frmViewStatus = False For j = 0 To frmsCount If Forms(j).CurrentView = 0 Then Set Frm = Forms(j) frmViewStatus = True Exit For End If Next If frmViewStatus = False Then MsgBox "Open a Form in Design View then try again." & vbCr & vbCr & "Program CreateButton() Aborted." Exit Function End If Set Ctrl = CreateControl(Frm.Name, acRectangle, intSection, , , vLeft, vTop, (vWidth - dif), (vHeight - dif)) With Ctrl .Name = "cmd" & strName & "Box" .SpecialEffect = 4 .BorderWidth = 3 End With Set Ctrl = CreateControl(Frm.Name, acCommandButton, intSection, , strName, vLeft, vTop, vWidth, vHeight) With Ctrl .Name = "cmd" & strName .Caption = strName End With x = Frm.Module.CreateEventProc("MouseMove", Ctrl.Name) txt = "BAnimate me.name, 1, " & Chr(34) & "cmd" & strName & Chr(34) Frm.Module.InsertLines x + 1, txt hfd = Choose(intSection + 1, "Detail", "FormHeader", "FormFooter") z = Frm.Module.ProcBodyLine(hfd & "_MouseMove", vbext_pk_Proc) If z = 0 Then x = Frm.Module.CreateEventProc("MouseMove", hfd) Else x = z + 1 End If txt = "BAnimate me.name, 0, " & Chr(34) & "cmd" & strName & Chr(34) Frm.Module.InsertLines x + 1, txt CreateButton_Exit: Exit Function CreateButton_Err: Resume CreateButton_Exit End Function
Press Ctrl+S to save the programs. Keep the VBA Window open.
Do the Test Run.
Now that you have the main functions for creating and animating Command Buttons, let us do a quick run to see how easy it is.
Close all open forms, if any.
Open a new Form in Design View.
Display the VBA window, if it was closed or minimized (Alt+F11).
Display the Debug Window (Immediate Window) - Ctrl+G.
Type the following statement in the Debug Window and press Enter Key:
CreateButton 0, "Edit"The first parameter value (0) represents the section of the form where the command button will be placed.
-
0
= Detail Section -
1
= Form Header -
2
= Form Footer
-
The second parameter ("Edit") serves two purposes: it defines the command button’s Name (which will be modified to
cmdEdit
and assigned to the Name property) as well as its Caption.⚠️ Important: The second parameter must always be a single word. This is essential for correctly creating the
MouseMove
event procedure in the form’s module. Once the button is created, you can always change its Caption later if needed.
Minimize the VBA window to show the Form in Design View. You can see the Command Button is created in the Detail Section of the Form with the Caption Edit.
Change the Form into Form View.
Move the Mouse over the Command Button. The button moves up a little and to the left to show a shadow at the bottom and to the right of the Command Button.
Move the mouse out of the button. The Command Button settles back to the original position, hiding the shadow.
Repeat this action in quick succession. You can see the movement of the button more clearly.
The VBA Code is Written by the Program.
If you display the Form's VBA Module, you can see that the following VBA Program lines are written into it:
Private Sub cmdEdit_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) BAnimate Me.Name, 1, "cmdEdit" End Sub Private Sub Detail_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) BAnimate Me.Name, 0, "cmdEdit" End Sub
Change the Form mode to Design View again.
Click on the Command Button to select it.
Drag the Command Button to the right and down to show the Rectangle Control with the special effect shadow underneath it.
The Command Button and the Rectangle Control work together to create the animation effect. To move them as a pair, click near the command button and drag the mouse over both controls to select them together. Then, drag the selection to the desired location on the form.
It is important to do this before creating another command button in the same form section. Otherwise, the new button will be placed directly on top of the previous one. By default, all newly created command buttons are positioned in the same location within their section.
Right-click on the Detail Section of the Form and select Form Header/Footer to display them on the Form.
Creating a Button on the Header or Footer Section.
You can now try the CreateButton() function with the first parameter set to 1 or 2 to create command buttons in the Form Header or Form Footer sections, respectively.
The second parameter, which specifies the name of the command button, must be unique for each button on the same form.
Below are sample statements demonstrating how to create animated command buttons on the header and footer sections of the form:
CreateButton 1, "PrintPreview"
CreateButton 2, "Exit"
Note: Make sure the Header and Footer sections are visible before attempting to create command buttons on them.
Also, ensure that only one form is open in Design View. If multiple forms are open, the first form found in design mode will be selected for creating the button controls.
During the form design time, running the CreateButton()
function from the Debug Window is the most convenient method.
However, if you prefer a different approach, such as launching the program from a Command Button click, that can also be implemented easily.
Button Creation from a Command Button Click.
We can create a Command Button on a form that, when clicked, allows you to input parameter values for the button creation program. This will quickly create the new button on the form currently in Design View and automatically generate its associated Sub-Routines in the form’s module.
Open a new Form in Design View.
Create a Command Button as you normally do.
Display its Property Sheet when the Command Button is in the selected state (F4).
Change the Name property value to cmdCreate and set the Caption property value to Create Button.
Display the Form's VBA Module (Alt+F11).
Copy and paste the following Code into the Module and press Ctrl+S to save the Form with the name frmCreateButton:
Private Sub cmdCreate_Click() Dim intSection As Integer, strButtonName As String Dim msg As String msg = "Form Section (0,1 or 2)" & vbCr msg = msg & "0 - Form Details" & vbCr msg = msg & "1 - Form Header" & vbCr msg = msg & "2 - Form Footer" intSection = 3 Do While intSection < 0 Or intSection > 2 intSection = Nz(InputBox(msg, "cmdCreate_Click()"), 0) Loop strButtonName = "" Do While Len(strButtonName) = 0 strButtonName = InputBox("Command Button Name", "cmdCreate_Click()") Loop If (intSection >= 0 And intSection < 3) And Len(strButtonName) > 0 Then CreateButton intSection, strButtonName End If End Sub
Perform a Demo Run
Open a form in Design View and display the Form’s Header/Footer Sections.
Open the frmCreateButton in Normal View.
Click on the Command Button to enter the parameter values of the program.
Input one of the values (0, 1, or 2) suggested by the Prompt to select a Section of the Form and press the Enter Key or click the OK button.
Enter a Name for the Command Button in the second prompt (it should be a single word like PrintPreview) and press Enter Key or Click OK.
The Command Button controls are created on the selected Section of the form you kept open in the design view.
- Command Button Animation
- Double Action Command Button
- Colorful Command Buttons
- Transparent Command Button
- Command Button Animation-2
- Creating an Animated Command Button with VBA
- Command Button Color Change on Mouse Move
If you want to use this method across all your projects, you can transfer the first two functions, BAnimate() and CreateButton(), into a common Library Database. Then, attach this library as a Reference Library File to your projects. (Refer to the blog post Command Button Animation to learn how to do this.)
No comments:
Post a Comment
Comments subject to moderation before publishing.