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

解決


はづき  2003-03-06 11:31:16  No: 77330

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


魔界の仮面弁士  2003-03-06 18:06:18  No: 77331

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

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


魔界の仮面弁士  2003-03-06 18:10:15  No: 77332

あとは、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 19:12:32  No: 77333

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


魔界の仮面弁士  2003-03-06 20:49:41  No: 77334

> 後者の策を使用させていただき
> 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-08 01:37:03  No: 77335

なるほど・・・

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加