葵さんが想像している通りで、既にコージさんも指摘している様に、転置集計結果の表は項目名と
項目数が一定しないことが原因です。
表示するフォームの項目数が足りなければ、目的のデータが表示されませんし、不足していれば、
「フォームには解析できない式が含まれています」というエラーになります。
解析できない式とは、ソース値に書かれている式の要素あるいは項目が存在しないという意味です。
つまり、転置集計結果に応じて項目数や項目名が変動する表を表示するフォームは原則(意味深!?)
存在しません。
●簡単な対応策
以前に類似の話が確か幅田さんの井戸端BBSで出されたことがありました。
簡単な対応策としては、想定される全ての項目(たとえば、あ〜おの5項目)の全ての項目を備えた
表を作っておき、ここに転置集計結果を読み込みます。そしてこの表をフォームで表示します。
転置集計で作られなかった項目は、未定義として表示されます。
●項目名と項目数の変動に応じるフォーム
葵さんが求めているのはこれだと思います。原則として不可能なのですが、高度な技術を使えば
作れない事はありません。ただしかなり込み入った内容になるので、例示的な質問に対するサンプル
的なものを作ることは不可能ですので、考え方だけ提示します。
@転置集計結果で作られる表の項目数と項目名を調べ上げる。
これは転置集計を行った後で、フォームを開く前のタイミングでイベントなり一括処理で行います。
課題となっているのは、転置集計表の2番目の項目から[合計]の手前の項目までの項目名です。
順に「#項目属性」関数を使えば、項目名が調べられますから、それを配列変数にでも格納しておきます。
Aフォームの対応する項目
最大数作ります。ただし、どの項目のソース値も未定義にしておき、ラベルの表示も未定義としておきます。
そして、全てのラベルとテキストオブジェクトを非表示に設定しておきます。
その様なフォームを予め作っておきます。
Bそのフォームのイベントのメイン部分で、転置集計表の項目名を格納しておいた配列変数の値を調べて、
1番目の変数に値(項目名)が書かれていれば、オブジェクト操作コマンドで次の様なことを行います。
・テキストオブジェクトのソース値:項目名を設定します。
・ラベルの表示:項目名をラベルの表示に設定します。
そしてテキストとラベルを非表示から表示に変更します。
以上の操作を、配列変数に書き込まれている転置集計表の項目の数だけ繰り返します。
方法は以上の通りですが、かなりトライ&エラーを繰り返す必要があり、手間の掛かる作り込みになると
思います。
うまく作り込めれば、結果としては、転置集計表の項目名に応じた数で表示されるフォームが作られるはずです。
なお、「具体的にどの様にすれば良いか」と聞かれても実際のデータに応じて作り込まなければならないので、
具体的な提示は困難です。(上記の手順でチャレンジしてみて下さい。)
|