2016-08-24 8 views
0

есть функция или свойство, чтобы получить имя переменной?VBA: получить имя переменной

Нечто подобное

msgBox myVariable.name или

msgBox nameOfVariable(myVariable)

, который возвращает "myVariable", когда я определил его, например, myVariable = "whatever"? Google просто задает вопросы для переменных ссылок ...

+2

Почему вы хотите это сделать? XY проблема? –

+0

Я хочу, чтобы некоторые переменные были заполнены в ячейки, указанные именами (переменных и ячеек). – alve89

+3

нет нет. вы должны использовать либо объект 'Dictionary', либо' Class' – user3598756

ответ

-1

Вы имеете в виду что-то вроде этого?

Sub test() 
Dim C As New Class1 
Dim VariableName As String 

C.FavoriteNumber = 55 

VariableName = "FavoriteNumber" 

MsgBox CallByName(C, VariableName, VbGet) 
End Sub 
+0

Как бы это реализовать? Итак, что нужно вставить в Class1? – alve89

+0

@ alve89 Имена ваших переменных, как общедоступные поля/свойства класса. – GSerg

+0

Почему вы голосуете за этот ответ ?. –

0

возможный подход класса будет следующим (с комментариями): Модуль класса

  1. Добавить

    в VBA IDE

    • нажмите Вставка-> Module Class

    • нажмите View -> Окно Property

    • введите (Name) свойство текстовое поле и введите в «Variable» (или что вы можете предпочесть, но соответствовать в следующих шагах)

    • введите следующий код в панели Class кода

      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 класса в коде

    в качестве примера эксплуатируя Variable класс для трех переменных, скажем, значения String для 1-го, в Integer значения для 2-го и значения Double для 3-го, в любом модуле код панели введите следующий код:

    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 
    
+0

@ alve89: Вы прошли через это? – user3598756

Смежные вопросы