構造体変数の動的変更


りらっく  2004-04-08 14:23:08  No: 82940  IP: [192.*.*.*]

変数の定義についての質問です。
説明が下手ですけど、よろしくお願いします。

private、publicにて、変数を定義する場合ですが、
プログラム起動時に、システム日付などによって、定義を動的にすることは
できないんでしょうか?

例えば、1日は構造体を1個、2日は2個...といったように、
プログラムを起動する日によって、定義する変数の構造体の数を変更したいんです。

構造体の数の変更後、プログラム実行時には
Redimで再定義をかけて、プログラムを実行したいんです。

構造体変数の定義を動的にすることは不可能でしょうか?

編集 削除
りらっく  2004-04-08 14:47:44  No: 82941  IP: [192.*.*.*]

Public Type  TableA
    Str1          As String    
    Str2          As String    
    Str3          As String   
End Type
Public HAIRETU()  As TableA


このStr1〜Str3の部分を動的に設定し、
Public Type  TableA
    Str1          As String    
End Type
Public HAIRETU()  As TableA
の場合もあれば、


Public Type  TableA
    Str1          As String    
    Str2          As String    
    Str3          As String   
    Str4          As String   
    Str5          As String   
End Type
Public HAIRETU()  As TableA
もあるといった感じの設定です。

編集 削除
へいぽ  2004-04-08 14:55:08  No: 82942  IP: [192.*.*.*]

次のような感じでよいのでは?

Option Explicit
Private Type TableA
  str() As String
End Type
Public HAIRETU()  As TableA

Private Sub Form_Load()
  ReDim HAIRETU(2)
  ReDim HAIRETU(0).str(0)
  ReDim HAIRETU(1).str(3)
  ReDim HAIRETU(2).str(5)
End Sub

編集 削除
りらっく  2004-04-08 15:21:22  No: 82943  IP: [192.*.*.*]

へいぽ様ありがとうございます
試してみたいのですが、少し私のやりた事と異なるので、アレンジしてやってみたところ、無理でした(泣)
Private Sub Form_Load()
  ReDim HAIRETU(2)
  ReDim HAIRETU(0).str(0)
  ReDim HAIRETU(1).str(3)
  ReDim HAIRETU(2).str(5)
End Sub
のように、HAIRETUをふやし、その中で、さらに、Strの数を増やすのではなく、HEIRETU()の数、Str()の数両方とも、動的ですが、Strの動的数は、
HEIRERU()すべての配列に対応します。
HRIRETU(1)の場合でも、HEIRETU(5)の場合でも、数に対応した動的配列
Str(10)が入るといった感じです。
このHEIRETUを、起動時に動的に設定したいのですが、上記にかいた、このStr1〜Str3の部分を動的に設定し、
Public Type  TableA
    Str1          As String    
End Type
Public HAIRETU()  As TableA
の場合もあれば
Public Type  TableA
    Str1          As String    
    Str2          As String    
    Str3          As String   
    Str4          As String   
    Str5          As String   
End Type
Public HAIRETU()  As TableA
もあるといった感じの設定です。    は、両方あるということではなく、
常にどちらか一方、といった感じに設定したいです。
プログラム上記に
Private Type ATable
  str() As String
End Type
Public HAIRETU()  As ATable
テーブルをまず宣言し、
プログラム内で、Max,Minを取得後、
  ReDim HAIRETU(Max).str(Min)
と宣言しましたが、エラーになってしまいます。(泣)
どうすればいいでしょうか?

編集 削除
へいぽ  2004-04-08 15:53:22  No: 82944  IP: [192.*.*.*]

> プログラム内で、Max,Minを取得後、
>   ReDim HAIRETU(Max).str(Min)
> と宣言しました

Max, Min が何なのか分かりませんが、
こういうことですか?

Option Explicit
Private Type TableA
  str() As String
End Type
Public HAIRETU()  As TableA

Private Sub Form_Load()
  Dim i As Integer
  ReDim HAIRETU(Max)
  For i = 0 To Max
    ReDim HAIRETU(i).str(Min)
  Next i
End Sub

編集 削除