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 paneOption 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 codeas an example of exploiting the
Variable
class for three variables with, say, aString
value for the 1st, anInteger
value for the 2nd and aDouble
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