2016-08-24 16 views
0

変数名を取得する関数またはプロパティはありますか?私は、例えばでそれを定義したとき"myVariable"を返しVBA:変数名を取得

msgBox myVariable.name または

msgBox nameOfVariable(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

私はこれをどのように実装しますか?クラス1に挿入する必要があるのは何ですか? – alve89

+0

@ alve89クラスのパブリックフィールド/プロパティとしての変数の名前。 – GSerg

+0

なぜこの回答を投票しますか? –

0

(コメント)は、次のことになる可能性クラス・アプローチ:

  1. は、クラスモジュールの

    を追加

    VBA IDEで

    • インサート>クラスモジュールをクリックし

    • [View]をクリック - >プロパティウィンドウ

    • (Name)プロパティのテキストボックスを入力し、「変数」と入力(または次の手順に好むが、と一貫性が何であれ)

    • Classコードウィンドウに次のコードを入力します。

  2. 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 
    
  3. は、あなたのコード内で Variableクラスを悪用

    第一のためString値、2番目と3番目のためDouble値についてInteger値、たとえば、と三つの変数のためのVariableクラスを利用する例として、任意のモジュールのコードウィンドウに次のコードを入力してくださいは:

    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

関連する問題