FC2ブログ

スポンサーサイト 


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--

Category: スポンサー広告

TB: --  /  CM: --

top △

フォームの起動 


DoCmd.OpenForm でフォームを起動する時、5つ目の引数でデータ入力モードを指定できますよね。

例えば、
ボタン「btn1」がクリックされたら
  DoCmd.OpenForm "フォーム名", , , , acFormAdd, acDialog

ボタン「btn2」がクリックされたら
  DoCmd.OpenForm "フォーム名", , , , acFormReadOnly, acDialog

ここでさらに、起動されたフォームにボタン「btn21」「btn22」「btn23」があったとして、
起動が「btn1」からであった場合、「btn22」は表示したくない。
起動が「btn2」からであった場合、「btn21」は表示したくない。

起動元から、起動したフォームの状態を変更する・・・・
これ、(私は)あまり好きじゃないので、起動されたフォームでどうにか・・・・って考えます。
特に今回は、acDialog を指定しているので、起動したフォームが閉じられるまで、
起動元の処理は止まっちゃいます。

acDialog 指定を外して、デザインで
「ポップアップ」を「はい」 & 「作業ウィンドウ固定」を「はい」にすれば・・・
(ヘルプに書いてますね)
起動元の処理を止めておきたい・・・ acDialog 指定が必須・・・さて、どうしましょう
 
解決策の一つとして、DoCmd.OpenForm 時に OpenArgs を設定して教えてあげる方法があります。
起動が「btn1」なら OpenArgs に 1 を設定するので、起動された方では Me.OpenArgs = 1 で判別してね。

OpenArgs を使わないで、グローバル変数を使うってこともあるかもしれません。

私ならどうするかな・・・・という事で
DoCmd.OpenForm で指定するものは、それが適用された状態でフォームが起動されるようです。
フィルタを指定していたら、指定されたものが Me.Filter に設定され、Me.FilterOn = True で・・・
ということは、acFormAdd / acFormReadOnly で異なる部分を探せばいい・・・と思います。

acFormAdd では
Me.状態
 AllowEditsTrue
 AllowDeletionsTrue
 AllowAdditionsTrue
 DataEntryTrue

acFormReadOnly では
Me.状態
 AllowEditsFalse
 AllowDeletionsFalse
 AllowAdditionsFalse
 DataEntryFalse

フォームのデザインで、追加/削除/更新の許可を「はい」「いいえ」どちらに設定していても、
上記内容に置き換わるようです。(他のものは未調査です)

acFormAdd / acFormReadOnly の2つしか使わないのであれば、どれで判別しても良さそうです。
( Form_Open とか Form_Load で)


今回、サンプルファイルはありません。
関連記事

2012/06/03

Category: 注意しよ

TB: --  /  CM: 0

top △

この記事に対するコメント

top △

コメントの投稿

Secret

top △


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。