[AccessD] Ribbon context

Ryan Wehler wrwehler at gmail.com
Tue Jan 25 06:43:23 CST 2022


Yes I plan to call a procedure in the form event, I just was looking for a way to do it without modifying a ton of forms. Which is why a class came to mind withevents

> On Jan 25, 2022, at 6:24 AM, Jim Dettman via AccessD <accessd at databaseadvisors.com> wrote:
> 
> Besides inserting code, you can also simply make a call to a standard procedure right from the OnActivate Property of the form.
> 
> Between these two methods, it's easy to hook-up standard behavior without resorting to classes.
> 
> Jim.
> 
> -----Original Message-----
> From: AccessD On Behalf Of Bill Benson
> Sent: Monday, January 24, 2022 10:51 PM
> To: Access Developers discussion and problem solving <accessd at databaseadvisors.com>
> Subject: Re: [AccessD] Ribbon context
> 
> Writing an onActivate event into every form is a walk in the park. Just add
> a reference to
>    Microsoft Visual Basic for Applications Extensibility 5.3.
> 
> 
> Below is a procedure that would add a Form_Activate event to every
> form, check if there is already a line saying Call MyProcedure, if not add
> that line of code before the End Sub. If no Form_Activate, it will add such
> a procedure with that line of code.
> 
> Save your project before running it; and do a Debug.Compile afterwards to
> make sure that nothing went wrong unexpectedly.
> 
> You will have to manually save after the code is checked.
> Note, it is not easy to debug running code that is inserting code lines, so
> test this on a small database or put in a loop controller to perform the
> action on the first N forms, to make sure it works for you.
> 
> Sub PutInOnActivate()
> Const Form_Activate         As String = "Private Sub Form_Activate()"
> Const LINE_LENGTH           As Integer = 27
> 
> Dim vbComp                  As VBIDE.VBComponent
> Dim vbMod                   As VBIDE.CodeModule
> Dim Form                    As Object
> Dim Container               As Object
> Dim strAllForms             As String
> Dim iLine                   As Long
> Dim jLine                   As Long
> Dim strLine                 As String
> Dim strNextLine             As String
> Dim bLineAdded              As Boolean
> 
> For Each Container In CurrentDb.Containers
>    If Container.Name = "Forms" Then
>        Exit For
>    End If
> Next
> 
> For Each Form In Container.Documents
>    strAllForms = strAllForms & "|Form_" & Form.Name
> Next
> If strAllForms <> "" Then
>    strAllForms = strAllForms & "|"
>    For Each vbComp In Application.VBE.VBProjects(1).VBComponents
>        If InStr(strAllForms, "|" & vbComp.Name & "|") > 0 Then
>            With vbComp.CodeModule
>                For iLine = 1 To .CountOfLines
>                    strLine = Trim(.Lines(iLine, 1))
>                    If Left(strLine, LINE_LENGTH) = Form_Activate Then
>                        bLineAdded = False
>                        For jLine = iLine + 1 To .CountOfLines
>                            strNextLine = Trim(.Lines(jLine, 1))
>                            If Left(strNextLine, 7) = "End Sub" Then
>                                .InsertLines jLine, vbTab & "Call
> MyProcedure"
>                                GoTo NextForm
>                            ElseIf Left(strNextLine, Len("Call
> MyProcedure")) = "Call MyProcedure" Then
>                                GoTo NextForm
>                            End If
>                        Next
>                        .InsertLines iLine + 1, vbTab & "Call MyProcedure"
>                        GoTo NextForm
>                    End If
>                Next
>                .InsertLines iLine, "Private Sub Form_Activate()"
>                .InsertLines iLine + 1, vbTab & "Call MyProcedure"
>                .InsertLines iLine + 2, "End Sub"
>            End With
>        End If
> NextForm:
>    Next
> End If
> End Sub
> 
> 
> 
>> On Mon, Jan 24, 2022 at 7:38 PM Ryan W <wrwehler at gmail.com> wrote:
>> 
>> In Access I’m trying to disable some ribbon buttons based on the form in
>> question and permissions to delete records on that form.
>> 
>> I’ve got the getEnabled logic worked out and it disables the delete button
>> on the ribbon when I invalidate the control via the OnActivate event for
>> the form (so it runs again if the form tab is switched back).
>> 
>> My issue is we have hundreds of forms that would need an OnActivate event
>> added so the delete button can be contextually controlled.
>> 
>> 
>> Is there a better way to do this that isn’t a really fast timer event or
>> some sort of class for handling that event on all forms (can you even
>> instantiate a class object on a closed form?)
>> 
>> 
>> 
>> Right now the delete button always shows but the code behind it will not
>> succeed if the back end tables don’t grant the permissions, it would just
>> be nice to sort of give a visual cue that the action isn’t possible.
>> 
>> 
>> Sent from my iPhone
>> --
>> AccessD mailing list
>> AccessD at databaseadvisors.com
>> https://databaseadvisors.com/mailman/listinfo/accessd
>> Website: http://www.databaseadvisors.com
>> 
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> https://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> https://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com


More information about the AccessD mailing list