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...
a possible Class approach would be the following (commented):
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With