Access JumpStart 2.0 | Blog

A Rapid Development Framework for Microsoft Access

So I’m doing some proof of concept here.

I want to use a starting syntax like the following in the Debug.Print line:

Public Sub TestCustomTags()
    Dim testCT As CustomTags
    Set testCT = New CustomTags
    Dim ctl As Access.Control
    Set ctl = Form_TestForm.TestControl
    Debug.Print testCT(ctl)
    ' Eventually code should do something like
    ' testCT(ctl)("OriginalLeft")
    ' and that should be able to print a string that I had set.
End Sub
Visual Basic
'Class module CustomTags
Option Compare Database
Option Explicit

'@DefaultMember
Public Function Controls(ctl As Access.Control) As String
    Controls = ctl.Name
End Function
Visual Basic

Now the trick here to get the testCT(ctl) syntax is to set a default member in the class.

This basically makes testCT.Controls(ctl) and testCT(ctl) mean the same thing to VBA.

This is not a feature available for manipulation within the VBE environment.

You either have to export your file to text, add a line and reimport the class, or if you are a RubberDuckVBA user you can use the code I have above using ‘@DefaultMember before the Function/Sub/Property that I want to be default and then that opens up the syntax I’m using.

In order to do this with RubberDuck see the comments at the end of this article: https://rubberduckvba.blog/2019/12/14/rubberduck-annotations/#comment-4376

In order to do this using the export / import method, check out this article: http://www.cpearson.com/Excel/DefaultMember.aspx

Now I’ll be able to use another class with another default member to fully implement this. I’m looking forward to a final quick implementation of the basic functionality on Monday.

Sign up For a Daily Email Adventure in Microsoft Access

Every business day (typically M-F), I'll send you an email with information about my ongoing journey as an advanced Access application developer. It will be loaded with my tips and musings.

    We won't send you spam. Unsubscribe at any time.