[AccessD] Ribbon context

Ryan W wrwehler at gmail.com
Tue Jan 25 08:07:37 CST 2022


I meant hand modification, if I can do it programmatically, great!


On Tue, Jan 25, 2022 at 7:38 AM Bill Benson <bensonforums at gmail.com> wrote:

> So even if modifying a ton of forma takes little to no effort, you aren’t
> interested?
>
> Class modules are for controls not forms. If you want something to happen
> in a form event you unfortunately have to put the code in the form.
>
> Which I showed how to do easily.
>
> On Tue, Jan 25, 2022 at 7:43 AM Ryan Wehler <wrwehler at gmail.com> wrote:
>
> > 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
> > --
> > 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