is there a function or a property to get a variables name?
"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
(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
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
VariableClass in your code
as an example of exploiting the
Variableclass for three variables with, say, a
Stringvalue for the 1st, an
Integervalue for the 2nd and a
Doublevalue 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