1

Access 2007 (または 2010) では、VBA を使用してメイン フォームから、最初のサブフォーム内に埋め込まれたサブフォームのプロパティを設定する必要があります。どのフォームについて話しているかを明確にするために、コードで行っているように、このフォームを「subSubform」と呼びます (実際、subSubform はサブサブフォーム コントロールの名前です)。

フォームが読み込まれると、最初のサブフォームに空白のサブフォーム コントロールがあります (フォーム ソース オブジェクトが含まれていません)。必要に応じて、このコントロールの SourceObject プロパティに、有効なフォームの名前と、LinkMasterFields および LinkChildFields プロパティを入力します。そうでなければ存在しない拡張可能なプラス記号を取得するため、これはすべて正常に機能しているように見えます。

次に、subSubform の RecordSource を設定しようとすると、エラーが発生します。

2455 プロパティ Form/Report への無効な参照を含む式を入力しました。

私が使用しているコードは次のとおりです。

Me!subform1.Form!subSubform.Form.RecordSource = sSubformSQL
'and I've tried this with the same bad results
Me.subform1.Form.subSubform.Form.RecordSource = sSubformSQL
'and this too
Forms("frmQuery").subform1.Form.subSubform!Form.RecordSource = sSubformSQL

'And I've tried this. It fails too, on the last line with the same error:
    Dim frm As Form
    Set frm = Forms("frmQuery").subform1.Form
    Dim frm2 As Form
    Set frm2 = frm.subSubform.Form

タイマーを設定して、フォームの読み込みに時間がかかる場合に備えて、上記のコードを実行するのに 1 秒待機してみました。しかし、これは違いはありません。

メイン フォームではなく、最初のサブフォームからコードを実行しようとしましたが、どちらも役に立ちません。それでも同じエラーで失敗します。

FWIW、サブフォームとサブサブフォームの両方が DataSheet ビューです。ここでやろうとしていることに違いはないと思います (ただし、関連するパフォーマンスの問題についてはよく知っているので、怒鳴らないでください)。

おそらく非常に奇妙な要求であることは認識しています。しかし、これを必要とする動的クエリ インターフェイスを作成しています。

subSubform にフォーム プロパティを設定する方法はありますか?

4

2 に答える 2

1

通常、Formサブフォーム コントロールのプロパティは、サブフォームが表示された後にのみ「有効な参照」を取得します。したがって、あなたがそうするようにsubSubform.Formアクセスを実行したい場合

Me.subform1.Form.subSubform.Form.RecordSource = ...

アクセスを実行する前に、subSubform が表示されていることを確認する必要があります。これを行う最も簡単な方法は、subSubform が読み込まれている間 (Form_Load サブで)、独自にソースを設定できるようにすることです。

詳細と説明については、問題が同じである子フォームから孫フォームにアクセスしようとすると、Microsoft Access ランタイム エラー 2455の私の回答を参照してください。

于 2013-09-28T19:46:07.747 に答える
1

問題は、サブフォームのプロパティを設定することではありません。次の形式:

me.subform1.form.subform2.form.RecordSource = sql

s+問題なく動作するはずです。

問題は、Continues for (またはデータシート) の側で Continuum フォーム (またはデータシート) をネストしようとしていることです。これは許可されていません。

回避策は、単純に 2 つのサブフォームを並べて配置し、入れ子にしないことです。

リンク マスターの設定を使用して、2 番目 (子の子) のフォームを引き続き取得できます。

子 1 のリンク子/マスター設定では、次のように配置します。

linkChildFields main_id (親テーブルに関連付けるために使用されるこのサブフォームのフィールドの名前は何でも) LinkMasterFields [ID]

あなたが配置する子2フォームのリンクの子/マスター設定

linkChildFields main_id (親テーブルに関連付けるために使用されるこのサブフォームのフィールドの名前は何でも) LinkMasterFields [child1].[form].[ID] (「masterForm」は使用したコントロールの名前ですマスターフォームを保持します。

したがって、多対多をモデル化できますが、ネストすることはできませんが、上記のように、とにかく同じ結果が得られます。したがって、フォームは次のようになります。

ここに画像の説明を入力

また、左側 (子 1) の on-current イベントでも、ナビゲートするときに右側の再クエリを配置する必要があります。これは、多くの場合、自動的に更新されないためです。

そう:

me.parent.Child2.Requery
于 2012-09-14T08:55:35.107 に答える