Home » excel » excel vba – VBA: Get name of variable

excel vba – VBA: Get name of variable

Posted by: admin April 23, 2020 Leave a comment

Questions:

is there a function or a property to get a variables name?

Something like

msgBox myVariable.name
or

msgBox nameOfVariable(myVariable)

that returns "myVariable" when I defined it with e.g. myVariable = "whatever"?
Google just brings questions to variable referencing…

How to&Answers:

a possible Class approach would be the following (commented):

  1. Add Class Module

    in VBA IDE

    • click Insert-> Class Module

    • click View -> Property Window

    • enter (Name) property textbox and type in “Variable” (or whatever you may prefer but be consistent with in following steps)

    • enter the following code in the Class code pane

      Option Explicit
      
      'declare the fields that will be attached to every instance of this class
      Public name As String '<--| this will store the name of the variable to which you'll set the object of this class
      Public value As Variant '<--| this will store the value associated with the variable to which you'll set the object of this class
      
      'declare a `method` to write the `value` of the object in the named range named after the `name` field 
      Sub WriteRange(Optional wb As Variant) '<--| you can pass the reference of the workbook whose named ranges you want to exploit
         If IsMissing(wb) Then Set wb = ActiveWorkbook '<--| if no workbook reference is passed then the currently active workbook is assumed
         If TypeName(wb) = "Workbook" Then '<-- check for a proper workbook reference being passed)
              On Error Resume Next '<-- to prevent unassigned named range throw an error
              wb.Names(name).RefersToRange.value = value '<--| write the  value of the `value` filed of the current instance in the named range of the passed workbook named after the `name` filed of the current instance
          End If
      End Sub 
      
  2. Exploit Variable Class in your code

    as an example of exploiting the Variable class for three variables with, say, a String value for the 1st, an Integer value for the 2nd and a Double value for the 3rd, in any module code pane enter the following code:

        Option Explicit
    
        Sub main()
            Dim myVariable1 As Variable, myVariable2 As Variable, myVariable3 As Variable '<--| declare your variables of type "Variable": choose whatever name you may want
    
            Set myVariable1 = CreateVariable("myVariable1", "this is a string value") '<-- set your 1st variable with its name (you must use the same name as the variable!) and value (myVariable1 will have a `String`type value)
            Set myVariable2 = CreateVariable("myVariable2", 10) '<-- set your 2nd variable with its name (you must use the same name as the variable!) and value (myVariable2 will have a `Integer`type value)
            Set myVariable3 = CreateVariable("myVariable3", 0.3)'<-- set your 3rd variable with its name (you must use the same name as the variable!) and value (myVariable3 will have a `Double` type value)
    
            'exploit `WriteRange` method of your Class to write the object value into the corresponding named range: you must have set proper named ranges in your currently active workbook
            myVariable1.WriteRange '<--| this will write the string "this is a string value" in named range "myVariable1" of your currently active workbook
            myVariable2.WriteRange '<--| this will write the number '10' in named range "myVariable2" of your currently active workbook
            myVariable3.WriteRange '<--| this will write the number '0.3' in named range "myVariable3" of your currently active workbook 
        End Sub
    
        ' helper Function to create an object of `Variable` class and initialize its `name` and `value` properties 
        Function CreateVariable(name As String, value As Variant) As Variable '<--| the function returns an object of `Variable` class
            Set CreateVariable = New Variable '<--| this creates a new object of `Variable` class
            With CreateVariable '<--| refer to the newly created object and ...
                .name = name '<--| ... set its `name` property ...
                .value = value '<--| ... and its `value` property
            End With
        End Function