4

親 - >子 - >孫関係にあるAccess 2003データベース(Access 2007で開発中)に3つのフォームがあります。子フォームの 'Form_Load'サブフォームでは、孫のプロパティ(フォームヘッダー、行ソース、コントロールロジック)を設定します。子フォームを見ると、すべて正常に動作します。私は親フォームを表示すると、私はエラーを取得する:子フォームから孫のフォームにアクセスしようとすると、Microsoft Accessランタイムエラー2455

線を基準で

Run-time error '2455': You entered an expression that has an invalid reference to the property Form/Report.

Me.GrandchildFormName.Form.Foo.Caption = "bar" 

私はいずれかをスローせず Formプロパティ以外孫フォームの任意のプロパティにアクセスすることができますエラー。誰がこれを引き起こしているかも知っていますか?私は新しいデータベースでテストケースを作ったので、正常に動作したので、私はデータベースに継承されたレガシーコードに何かがあることに気を配っています(私は言われましたが、18年前のAccessデータベースシステム)が問題を引き起こしていますが、私はここであなたの誰かが回避策を知っているかどうか確認することにしました。

それは、関連するなら、フォームの実際の構造は、孫のフォームはこのように、子フォームで複数回(異なるコントロール名の下)に表示されると、少し複雑です:

|--------------| 
| A   | 
| |----------|| 
| | B  || 
| | |------||| 
| | | C[1] ||| 
| | |------||| 
| |   || 
| | |------||| 
| | | C[2] ||| 
| | |------||| 
| |----------|| 
|--------------| 

はすべて排除孫のフォームの1つでは問題は解決しません。

孫のフォームがロードされているインスタンスを知る方法があれば問題を回避するコードを書くことができますが、私の知る限り、これは不可能です。ただ、問題のタイプを与えてライン上の

答えて

-2

: エラーの場合は、次

実行にそれを再開し、それがあなたの問題を解決します。一度実行すると、行を消去して作業を続けることができます。

+2

これを説明できますか? – jeremy

+0

これは非常に特殊な状況下でのみ機能しますが、これはOPの問題の一般的な根本的なケースではないようです。 – PhilS

2

それぞれのフォーム(データソースではありません)については、Parent,ChildGrandChildを使用します。

一般に、サブフォームコントロールのFormプロパティは、サブフォームが表示された後にのみ「有効な参照」を取得します。したがって、Child.Form_Loadにコードを実行する場合は、Parentが開いたときにGrandChildが表示されていることを確認する必要があります。

ソリューション

私はあなたのケースでGrandChildは、あなたが(開口部Parentなし)Childを開いていますが、Parentを開いたときGrandChildが表示されていない場合、私はあなたのUIを変更せずに、次の解決策を示唆している表示されていることを前提としていますので:

GrandChild.FormにアクセスするChild.Form_LoadのコードをGrandChild.Form_Loadに移動します。 GrandChildがロードされると、ChildMe.Parent.Form)またはParentMe.Parent.Parent.Form)のすべてにアクセスできます。GrandChildを変更することにより、ダウンGrandChildに情報をプッシュする代わりChildの(Child又はParentから)情報を取得し、それ自体を変更しなければならないGrandChildすなわち

例:N ChildChildとの関係は、1があります:GrandChildにn個の関係を

のはParentは1を持っているとしましょう。 Parentは、データシートとしてChildを提示するので、Parentが開くと、GrandChildは表示されません。この場合、GrandChild.Formへのアクセスは、GrandChildが表示されていないので、2455ランタイムエラーになります。

この例では、Childデータシートの各行には、プラス記号があり、GrandChildと表示されます。たとえば、Child.Form_Load subにあるコードを実行するボタンをParentに置いたとします。 Parentの後にこのボタンをクリックすると、エラーが表示されます(上記を参照)。Childのプラス記号の1つをクリックしてボタンをクリックすると、のエラーのコードが実行されます。GrandChildGrandChild.Formアクセスが実行される前に表示されました。

+0

Froms!FormNamesの組み合わせ、またはフォーム名またはその両方、または感嘆符やピリオド...あなたが望むことをするために使用する必要があるのは、ほぼ完全にランダムなようです。 – Hill

関連する問題