チェックボックス、コンボボックス、番号編集、およびテキスト編集ボックスを含むウィンドウを使用してユーザー入力を取得し、その入力を使用してデータの分析を実行するスクリプトがあります(ボックスの外観については添付の図を参照)。さまざまなオプションセットで使いやすくするために、開いているすべてのデータテーブルとレポートを閉じ、入力したオプションをすべてクリアする[リセット]ボタンを用意しました。通常、ボタンは正しく機能しますが、[個別の日付範囲]のチェックボックスまたは[NCコードの入力]の下の最初のテキスト編集ボックスをリセットしようとするとエラーが発生することがあります。エラーアラートには、「送信にはスクリプト化可能オブジェクトのアクセスまたは '送信'の評価が必要です」と表示されます。アラートボックスの写真と、エラーが発生したときに選択したオプションを含めました。添付のスクリプトは問題の部分にすぎないため、データ入力ボックスを設定してから入力オプションを取得し、リセットして閉じることができます。1つのチェックボックスとデータ入力ボックスの残りの部分が正しくリセットされているように見えるので、どのようなヘルプも評価されます。


数秒間開いていても、これらの変数の1つを使用する他のスクリプトやプロシージャ、またはこれらの変数の1つのような列名を持つテーブルは、表示オブジェクト名と競合する可能性があります。
私は間違いなく名前空間を調べます。エラーが発生したときにスクリプトが2回実行されていた場合、私はあなたが提案しているものがそれを解決すると思いますが、リセットボタンが押されたときに新しいエントリウィンドウは生成されません。データを取得するボックスの値だけがデフォルトにリセットされます。それと、エラーが時々そしていくつかのチェックボックスでのみ起こるという事実は私にもっと起こっているかもしれないと考えるように導きます。
この種のエラーは、オブジェクトが存在しなくなった場合、またはスコープの問題がある場合、名前の競合が発生した場合に発生します。私は時々これが原因かもしれないと思います。
私はこのエラーを再現することができます:
- スクリプトを実行し、いくつかの値を設定してください
- もう一度スクリプトを実行してください。
- 2番目のダイアログウィンドウを閉じる
- 最初のウィンドウに移動して[リセット]を選択すると、エラーが発生します。これは、d1、d2などのすべての表示ボックスが2番目のダイアログウィンドウに割り当てられているためです。 リセットは、もう存在しないオブジェクトにアクセスしようとしています。
この<< Topの親を参照してプログラミングしてから、オブジェクトを見つけるか、ウィンドウの名前空間を使用します。ウィンドウ:d1、ウィンドウ:d2など これを修正します。
アプリケーションを作成する大きな利点は、各インスタンスに独自のネームスペースがあり、スクリプト化が簡単になることです。
もう1つの方法は、スクリプトの先頭に追加することです名前のデフォルトはここにあります(1)。そしてそれを保存してください。
ダイアログウィンドウのすべてのインスタンスを閉じます。
今度はこのスクリプトを実行します(必要に応じてパスを変更します)。
Names Default to Here(1);
Include ("c:\temp\Reset Boxes Question Script.jsl", <<NEW context=""></NEW>最初のダイアログウィンドウで値を変更してから、2番目のダイアログウィンドウを閉じます。最初のウィンドウに戻り(エラーの原因となった手順を繰り返すだけ)、[リセット]を押します。問題ありません。
新しいコンテキストで単一のInclude()を使用すると、diaologとその名前付きオブジェクトに匿名の名前空間が作成され、スコープ問題が解決されます。
名前空間について読むべきです。