変数の一部をループ変数で可変にするには?

解決


VBがんばってます  2004-12-08 00:56:43  No: 118064

開発環境VB6.0 Win2000です。

いつもお世話になっております。
今組んでいるプログラムで引っかかってしまい、何か案があれば
と思い書きました。自分ではどうしてもネタが思い浮かばなかったもので・・・

for i = 1 to 5
   m01Date = date
   m01ID = ID
next
このようなループ処理を行っておりますが、m01の部分をループ変数を使用して

for i = 1 to 5
   m0 & i & date = date
   m0 & i & ID = ID
next
と、このような形にしたいのですがこれでは構文エラーになってしまいます(あたりまえですが・・・

どうかうまくこのようなループ処理を行う方法のアイディアをお持ちの方が
いらっしゃいましたらご教授願えませんでしょうか?
よろしくお願いします


LESIA  2004-12-08 01:15:31  No: 118065

ユーザー定義型を使うのはダメですか?

Option Explicit

Private Type m
    Date As Date
    ID As Integer
End Type

Private Sub Command1_Click()
    Dim m0(1 To 5) As m
    
    For i = 1 To 5
       m0(i).Date = Date
       m0(i).ID = ID
    Next i
End Sub


VBがんばってます  2004-12-08 01:29:07  No: 118066

LESIAさん、早々のレスありがとうございます。
レスをいただけて嬉しかったです。
解りづらい説明で申し訳ありませんでした。

m01Date,m01IDはクラスモジュールで宣言しているのです。

'----クラスモジュール(clsObj)--
変数宣言のみを行っています。
public m01Date as variant
public m01ID as variant
    ・
    ・
public m05Date as variant
public m05ID as variant

'---メインフォーム(frmMain)---
dim obj as new clsObj
  for i = 1 to 5 
     with obj
         .m01Date = date     ←.m0 & i & Date = date
         .m01ID = ID         ←.m0 & i & ID = ID  このようにしたいです。
     end with
  next
このように使用しています。

自分でもうまく処理することが出来ないか試してはいるのですが、なかなかうまく解決することが出来ません。

解りづらいソースと稚拙な説明で時間を取らせてしまい申し訳ないです。
もしよい解決法がありましたらご教授願います。
自分でもソースをいじってやってみます。


LESIA  2004-12-08 01:52:12  No: 118067

クラスで宣言しているなら、CallByName関数が使えます。

For i = 1 To 5
   CallByName obj, "m0" & i & "Date", VbLet, Date
   CallByName obj, "m0" & i & "ID", VbLet, ID
Next i

For i = 1 To 5
   Debug.Print CallByName(obj, "m0" & i & "Date", VbGet)
   Debug.Print CallByName(obj, "m0" & i & "ID", VbGet)
Next i


VBがんばってます  2004-12-08 02:02:01  No: 118068

LESIAさん、またまたレスを下さりありがとうございました。

CallByName関数というのははじめて知ったのですが、
LESIAさんが提示した下さった書き方をしてみた所、望みの動きが出来ました!
本当にありがとうございました。
助かりました!!!


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




  


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