こんにちは、
現在開いているすべてのテーブル名を表示するリスト ボックスのペアから 2 つのデータ テーブルを選択するようにユーザーに求めるダイアログ ウィンドウのスクリプトを作成しようとしています。ダイアログ ウィンドウ、リスト ボックス、および選択プロセスはすべて意図したとおりに機能しますが、選択した 2 つのテーブル名を変数として取得すると、それらをデータ テーブル参照に関連付けようとすると障害が発生します。データ テーブル参照は、後でコード内で選択したテーブルに対して作業を実行するために必要です。
最後の 2 行で問題が発生し、dt1 の次のエラーが発生します。
'Current Data Table' へのアクセスまたは評価では、引数にデータ テーブル参照を含める必要があります。Current Data Table/*####*/(SourceData)
SourceData と TargetData はそれぞれ 1 つのアイテムしかないリスト オブジェクトであることを認識しているため、データ テーブル名として関連付ける前に文字列に変換しようとしましたが、うまくいきませんでした。
どんな助けでも大歓迎です。 以下のスクリプトセクションを参照してください。
openTables = {} ;
為に( t = 1 、 t <= N テーブル() 、 t ++、挿入先( openTables 、データ表( t ) << GetName ))) ;
選択データウィンドウ=新しい窓( 「データテーブルを選択」 、 <<モーダル、
ソースパネル=パネルボックス( 「ソースデータテーブル」 、
ソースリストボックス=リストボックス( openTables 、最大選択( 1 )))) 、
ターゲットパネル=パネルボックス( 「対象データ表」 、
TargetListBox =リストボックス( openTables 、最大選択( 1 )))) 、
ラインナップボックス( NCol ( 2 ) 、ボタンボックス( "Ok" 、
ソースデータ=ソースリストボックス<< GetSelected ;
ターゲットデータ= TargetListBox << GetSelected ) 、
ボタンボックス( "キャンセル" 、止まる() )))
) ;
dt1 =現在のデータ テーブル(ソースデータ) ;
dt2 =現在のデータ テーブル(ターゲットデータ) ;
最初に関数を使用したいデータ表最後の 2 行の Current Data Table ではありません。
データ テーブルへの引数は文字列名である必要があります。 SourceData と TargetData の内容を表示すると、それらがリストであることがわかります。 これは、一般に、リストボックスではユーザーが複数の項目を選択できるためです。 したがって、選択した項目の数を 1 つに制限している場合でも、選択項目はリストとして返されます。
最後の 2 行を次のように置き換えることができます。
dt1 = Data Table( SourceData[1] );
dt2 = Data Table( TargetData[1] );
そのため、リストの最初の項目が使用されています。
これはもちろん、ユーザーが各リストから少なくとも 1 つの項目を選択したことを前提としています。 モーダル ウィンドウに検証を追加できます。 Modal メッセージを含む行の後に次を追加します。
<<ONVALIDATE>0 & NItems(TargetData)>0,
isValid = 1
,
isValid = 0;
Beep()
);
isValid
),</ONVALIDATE>
明らかに、この検証を拡張できます (たとえば、送信元と送信先の名前が同一でないことを確認するため)。