変数定義の入れ子?


りらっくま  2004-06-23 15:40:59  No: 84166  IP: [192.*.*.*]

いくつかの構造体で変数を定義しています。
構造体が3つあるのですが(A,B,Cとする)
Aの構造体に定義されている変数に代入されているデータを
まるごとCの構造体の一部に代入することは可能でしょうか?

入れ子で定義をしてみたんですが、だめでした。
ご教授お願いします。


Aテーブル変数定義
Public Type "A"Table
    A項目1    As String     
    A項目2    As String     
    A項目3    As String    
End Type


Bテーブル変数定義
Public Type "B"Table
    B項目1    As String     
    B項目2    As String     
    B項目3    As String    
End Type


Cテーブル変数定義
Public Type "C"Table
    C項目1    As String     
    C項目2    As String     
    C項目3    As String    
    C(A項目1)    As String     
    C(A項目2)    As String     
    C(A項目3)    As String    
End Type


Cテーブル変数の(A項目)部分にAテーブル変数に代入されているデータをごそっと
代入したいんです。(数個でしたら1個ずつ書きますが、100個単位なので、1行ずつ書けないんです)

編集 削除
nanashi  2004-06-23 16:47:03  No: 84167  IP: [192.*.*.*]

私なら構造体Cの中に構造体Aを用意しておきますが。

編集 削除
りらっくま  2004-06-23 17:00:33  No: 84168  IP: [192.*.*.*]

nanashi様
ご教授ありがとうございます。
構造体Cの中にAを用意するとわざわざ代入をする必要がないのですが、
構造体AはA単体で使用することがあるので、(各構造体配列を持っているので、配列番号が異なるため)別々の宣言が必要になりました。

処理を加えて今回の質問処理の作業が必要になったので、
策がありましたらご教授お願い致します。

編集 削除
nanashi  2004-06-23 17:13:13  No: 84169  IP: [192.*.*.*]

ん??
私が言ってるのはこういう↓ことですよ?

Public Type "C"Table
    C項目1    As String
    C項目2    As String
    C項目3    As String
    A項目      As "A"Table
End Type

必要な時に必要な構造体Aを代入できますし、別に用意してある構造体Aも単体で使用できると思うのですが。

編集 削除
りらっくま  2004-06-23 18:50:14  No: 84170  IP: [192.*.*.*]

nanashi様
重ね重ねありがとうございます。

↓こういうことでしょうか?

入れ子を全くしたことがないので、nanashi様のお考えが
わかりませんでした。
このようにして入れ込むということは、


Public Type "C"Table
    C項目1    As String
    C項目2    As String
    C項目3    As String
    A項目1     As "A"Table
    A項目2     As "A"Table
        ・
        ・
        ・
End Type

とATableの定義項目数分CTableの項目定義に
型を"ATable"に設定して入れ込むのでしょうか?
それとも、

Public Type "C"Table
    C項目1    As String
    C項目2    As String
    C項目3    As String
    A          As "A"Table
 End Type

型をテーブルにして1行でATableがすべて
入るということなのでしょうか?

ヘルプでもいろいろ調べましたがわかりませんでした。
よろしくお願致します。

編集 削除
魔界の仮面弁士  2004-06-24 09:08:14  No: 84171  IP: [192.*.*.*]

やりたい事がよくわからないのですが、入れ子と言うのは、

Private Type UDT01
  A As String
  B As String
End Type

Private Type UDT02
  C As String
  D As String
  E As UDT01
End Type

として、

    Dim X As UDT01
    Dim Y As UDT02
    
    X.A = "X-AAA"
    X.B = "X-BBB"

    Y.C = "Y-CCC"
    Y.D = "Y-DDD"

    Y.E = X

    Debug.Print Y.E.A

のような動作の事でしょうか?

編集 削除
りらっくま  2004-06-24 10:48:28  No: 84172  IP: [192.*.*.*]

魔界の仮面弁士様ありがとうございます。

初心者なもので、意味を理解するのがとても難しいです。
私のやりたい事です。

Aテーブル変数定義                Bテーブル変数定義              
Public Type "A"Table             Public Type "B"Table           
    A項目1    As String              B項目1    As String       
    A項目2    As String              B項目2    As String       
End Type                          End Type                        
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Cテーブル変数定義
Public Type "C"Table
    C項目1    As String     
    C項目2    As String     

    D項目    As  "A"Table     
    E項目    As  "B"Table     
End Type
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Private Sub Command1_Click()
    A.A項目1="Aの1" 
    A.A項目2="Aの2"

    B.B項目1="Bの1" 
    B.B項目2="Bの2"
End Sub
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Private Sub Command2_Click()
    C.C項目1="Cの1"
    C.C項目2="Cの2"

    D項目  =  "A"Table
    E項目  =  "B"Table
End Sub
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Private Sub Command3_Click()
    Msgbox  "C"Table.D項目.A項目1
    Msgbox  "C"Table.E項目.B項目1
End Sub


Command1、Command2をクリックした後にCommand3をクリックすると
Msgbox表示で"Aの1" と出るような処理がしたいです。

初心者なので高度な処理なのですが、魔界の仮面弁士様の書いてくれた処理と
同じことなのでしょうか?

編集 削除
うにぃ  2004-06-24 10:55:28  No: 84173  IP: [192.*.*.*]

とりあえず、魔界の仮面弁士さんの書いたソースを実行してみてはいかがでしょうか。
実際に動かしてみればわかると思います。

あと、サンプルだからだとは思いますが、あげられたやりたいことですが、
ソースコードとしてはおかしいですよ?
やりたいことはわかりましたけれども。

編集 削除