変数名で変数名を表現するには?

解決


はづき  2003-03-06 02:31:16  No: 77330  IP: [192.*.*.*]

VBで変数名同士を連結して変数名を表現することはできるでしょうか?
イメージ的には文字列変数を二つ用いて
Dim HenSuu As Integer
strA = "Hen"
strB = "Suu"
strA & strB = 5
というような感じなんですけど(連結でHenSuu = 5としたいのです・・・)
strA & strBしたものを変数として扱ってくれる関数でもないかな?と探しては見たものの
なかなか途方にくれました
できる方法があるならばよろしくお願いします

編集 削除
魔界の仮面弁士  2003-03-06 09:06:18  No: 77331  IP: [192.*.*.*]

求める答えになっているかは自信がありませんが、
「コレクション系のオブジェクト」を使えば良いのではないかと。

例えば、Dictionaryオブジェクトを用いるなら、
  Dim Col As Object
  Set Col = CreateObject("Scripting.Dictionary")
のようにしておいて、
  strA = "Hen"
  strB = "Suu"
  Col(strA & strB) = "12345"
  MsgBox Col("HenSuu")
という感じで。。。

編集 削除
魔界の仮面弁士  2003-03-06 09:10:15  No: 77332  IP: [192.*.*.*]

あとは、VB6のCallByNameを使うという手もあります。

Option Explicit

Public HenSuu As String

Private Sub Command1_Click()
    Dim strA As String
    Dim strB As String
    strA = "Hen"
    strB = "Suu"
    CallByName Me, strA & strB, VbLet, "12345"
End Sub

Private Sub Command2_Click()
    MsgBox HenSuu
End Sub


これで駄目なら、あとはScriptControlオブジェクトを使うか、ですかね。

編集 削除
はづき  2003-03-06 10:12:32  No: 77333  IP: [192.*.*.*]

早急なるご回答ありがとうございました
後者の策を使用させていただき
Publicで宣言していなかったのでエラーになり考え込んでしまいました
そりゃそうですよね・・・関数でどっかに飛んでるわけだし・・・
もっと精進いたします・・・

編集 削除
魔界の仮面弁士  2003-03-06 11:49:41  No: 77334  IP: [192.*.*.*]

> 後者の策を使用させていただき
> Publicで宣言していなかったのでエラーになり考え込んでしまいました

変数をPrivateにしているのであれば、それを
Friend(もしくはPublic)のメソッド(またはプロパティ)として
宣言してやればOKです。

Option Explicit

Private mHenSuu As String
Public Property Get Hensuu() As String
    Hensuu = mHenSuu
End Property
Public Property Let Hensuu(ByVal vNewValue As String)
    mHenSuu = vNewValue
End Property

Private Sub Command1_Click()
    Dim strA As String
    Dim strB As String
    strA = "Hen"
    strB = "Suu"
    CallByName Me, strA & strB, VbLet, "12345"
End Sub

Private Sub Command2_Click()
    MsgBox Hensuu
End Sub


> そりゃそうですよね・・・関数でどっかに飛んでるわけだし・・・
CallByNameは、オブジェクトのメソッド(またはプロパティ)を呼び出す関数です。
この場合は、「Formオブジェクト」に自作した「HenSuuプロパティ」を
操作する事になるわけですね。

編集 削除
はづき  2003-03-07 16:37:03  No: 77335  IP: [192.*.*.*]

なるほど・・・

後説明まで申し訳ありませんです・・・

編集 削除