VBA:获取变量的名称

VBA:获取变量的名称,vba,excel,variables,Vba,Excel,Variables,是否有函数或属性来获取变量名称 差不多 msgBox myVariable.name 或 msgboxnameofVariable(myVariable) 当我用例如myVariable=“whatever”定义它时,它返回“myVariable”? Google只是给变量引用带来了问题…一种可能的类方法如下(注释): 添加类模块 在VBA IDE中 单击插入->类模块 单击查看->属性窗口 输入(名称)属性文本框并键入“Variable”(或您可能喜欢但与以下步骤一致的任何内容) 在类代码窗

是否有函数或属性来获取变量名称

差不多

msgBox myVariable.name

msgboxnameofVariable(myVariable)

当我用例如
myVariable=“whatever”
定义它时,它返回
“myVariable”

Google只是给变量引用带来了问题…

一种可能的类方法如下(注释):

  • 添加类模块

    在VBA IDE中

    • 单击插入->类模块

    • 单击查看->属性窗口

    • 输入
      (名称)
      属性文本框并键入“Variable”(或您可能喜欢但与以下步骤一致的任何内容)

    • 代码窗格中输入以下代码

      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 
      

    • 如果您只有几个变量,那么类模块就是过死的。 虽然类模块确实是一个可以复制的模板,但我已经探索了一种模仿类模块的简化方法

      创建一个标准模块,将变量名作为模块名。 在此模块内创建函数,如
      Name
      Value
      e、 g

      在单元格中,粘贴
      =my\u VBA\u Project.myVariable.Name()

      缺点是这些值像常量一样硬编码。要更改值,需要手动编辑函数值


      我在VBA编程中使用这种格式来模拟OOP。

      为什么要这样做?XY问题?我想把一些变量填入(变量和单元格的)名称指定的单元格中。没有。必须使用
      字典
      对象或
      myVariable
      是变量的名称
      myVariable
      。要将其分配给单元格,只需执行
      [A1]=myVariable
      @alve89是否可以将其重新表述为:“我希望将一些变量填充到(变量和单元格的)名称指定的单元格中。”?我不明白你想干什么
          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
      
      Function Name()
          Name = "myNewName"
      End Function
      
      Function Value()
          Value = 10
      End Function