3

有効な Excel VB 定数の名前を含む文字列を評価して、その定数の値を返すことは可能ですか?

例えば

    Dim ConstantName as String
    Dim ConstantValue as Long

    ConstantName="xlValues"

    ConstantValue= UnknownFunction(ConstantName)

    'would set ConstantValue=-4163
4

3 に答える 3

2

楽しい!

Option Explicit

Function getConstantValue(constStr As String) As Variant

    Dim oMod As VBIDE.CodeModule
    Dim i As Long, _
        num As Long

    Set oMod = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule

    For i = 1 To oMod.CountOfLines
        If oMod.Lines(i, 1) = "Function tempGetConstValue() As Variant" Then
            num = i + 1
            Exit For
        End If
    Next i

    oMod.InsertLines num, "tempGetConstValue = " & constStr

    getConstantValue = Application.Run("tempGetConstValue")

    oMod.DeleteLines num

End Function

Function tempGetConstValue() As Variant
End Function

すべてのコードは、Module1 というモジュール内にある必要があります。これは、ルーチン内のテキスト "Module1" を変更するだけで簡単に変更できます。

への参照を追加する必要がありますMicrosoft Visual Basic for Applications Extensibility x.x

これが失敗する可能性のある方法はいくつかあります。問題がある場合はお知らせください:)

于 2013-01-24T01:05:01.567 に答える
0

定数を使用する代わりに、辞書を使用できます

Dim dict As Object

Sub InitialiseDict()
    Set dict = CreateObject(Scripting.Dictionary)
    dict("xlValues") = -4163
    dict("const1") = value1
    ... 
    dict("constN") = valueN
End Sub

ConstValue = dict("xlValues")
于 2013-01-24T18:18:19.433 に答える