エラーがForms(variableName).Controls
で発生しているので、命令があります簡単にデバッグすることができないほど多くのことをやっています。分割してください。
Form
オブジェクトを含む変数を宣言します - 私はAccessデベロッパーではありません。私は通常ExcelとMSFormsを使用していますので、UserForm
になりますが、Accessフォームは、私は間違っている可能性があります - 訂正された場合に編集して幸せになるでしょう(私は間違っている可能性があります)MSFormsタイプライブラリからのtは(UserForm
アクセスに取得するためにかなり熱心にしなければならないでしょう)使用するタイプを推測しているので、Form
コメント。
Dim theForm As Form
今Set
フォームオブジェクト:
Set theForm = Forms(variableName)
あなたのコードはまだ爆破しなかった場合、あなたは成功したフォームのインスタンスを取得しました。そのステップが失敗した場合、という添字が範囲外のの範囲外にあるため、おそらく私は驚いていません。
あなたのライブラリーは、その型の変数を宣言し、Controls
コレクションクラスを持っている場合:
Dim theControls As Controls
そして、それを割り当てます。
Set theControls = theForm.Controls
はおそらく、実行時エラーで爆破することができること4338、Form
にControls
のメンバーがいない場合...実際には加算されないでしょうが、Me.Controls
が動作するようです。
だから、戻ってtheForm As Object
を宣言し、代わりに特定のForm
のインターフェイスでの作業のため、VBAの遅延バインディング魔法のクエリオブジェクトのインターフェイスを聞かせて - 再び私は、多くのアクセスを知らないが、それはMe
がていることを、かなり可能です特定のフォームタイプはControls
コレクションを公開しますが、汎用のForm
タイプは公開していません - VBA UIフレームワークの内部構造はそのような混乱です。
したがって、COM-gibberishを話すには、Object
と宣言し、実行時にIDispatch
を照会し、Controls
のメンバーを見つけます。
命令(Controls
コレクションの割り当て)をスローせずに実行することができれば、問題なくコンテンツを反復できるはずです。
Forms
コレクションには、オープンフォームのみが含まれているように見えます。
に入れ、この機能を? –
'Forms(variableName).Controls'行の' ctrlごとに、 'Forms(variableName).Controls'を具体的に参照していることを確認してください。 – finjo