• ベストアンサー

Access すべてのフォームを開く

おしえてくださいm__m AccessにてWindowを最小化した後に現在開いているフォームを開くVBAを 作成しようとしていますがうまくいきません。 現在はWindowを最小化した後一つのフォームを開くVBAは下記の通り作成しました DoCmd.RunCommand acCmdAppMinimize DoCmd.OpenForm "メインフォーム", acNormal しかしながら現在開いているすべてのフォームをAccess Windowを最小化した後に 開くVBAはどのように記載すればいいでしょうか 皆さまのお知恵をかしてくださいm__m

質問者が選んだベストアンサー

  • ベストアンサー
  • Anzu4699
  • ベストアンサー率59% (26/44)
回答No.2

<回答> 抜粋>現在開いているフォームをポップアップで開く フォームを開くではなく、現在開いているフォームに対し再度ポップアップで前面に 出したいということであれば、現在開いているフォームを順番にアクティブウィンド 化をしていき前面表示させます 以下、サンプルコード (スペル間違いがあるかも、その点は注意願います) Dim intFrm As Integer Dim strFrm As String On Error Resume Next '*** エラー無効化 For intFrm = Forms.Count - 1 To 0 Step -1 strFrm = "" strFrm = Forms(intFrm).Name '-IF説明- strFrm <> "" : 万が一エラーが起きた場合 strFrm値は空白なので後続処理は動作せず、次のフォームに移るように '-IF説明- strFrm <> Me.Name : 自分自身のフォームは何もしないようにする場合には必要 If strFrm <> "" And _ strFrm <> Me.Name Then '--- 対応案1:アクティブ(再ポップアップ)化 DoCmd.SelectObject acForm, strFrm '--- 対応案2:再表示 'DoCmd.Close acForm, strFrm 'DoCmd.OpenForm strFrm, acNormal, "", "", , acDialog End If Next On Error GoTo 0 '*** エラー有効化 対応案2の再表示に関しては フォームが開いているもの対し、再度開くというのは出来なかった気がします そこから一旦クローズしてから開きなおす手法を取りますが、その場合、再表示のため 画面入力値が初期化されてしまう欠点があります 欠点回避には、また別の制御(作りこみ)が必要になってきます 以上でした

その他の回答 (1)

  • Anzu4699
  • ベストアンサー率59% (26/44)
回答No.1

<抜粋> 現在開いているすべてのフォームをAccess Windowを最小化した後に開くVBA <前提> 既に開いているフォームをAccessWindow最小化後に開くという意味(やりたい事)を、以下の様に判断、意味合いが違った場合、回答自体間違いになる点はご理解ください。 <やりたい事> AccessWindowを最小化しても、すでに開いているフォームはAccessWindowの外でも表示させたい <回答1> フォーム自体に持っている、フォームプロパティにある「ポップアップ=はい」にしておく事で、やりたい事の実現が可能です VBAで行うのではなく、初めからフォーム設定(設定保存)しておくことで いつでもAccessWindowを最小化されても開いているフォームは前面表示されます <回答1における注意点> 他のアプリ(エクセルやワード、メモ帳など)が動作している場合、AccessWindowを 最小化した際にフォーカスが他のアプリに行ってしまう事があります。 ここら辺は以下の調整が必要です きちんとフォームの順番を決めておき、フォームプロパティにある「作業ウィンド ウ固定をはい」にしておく、または、最小化後にフォーカスをフォームに割り当てる ※フォームプロパティとはフォームオブジェクトプロパティの事ではなく、 フォームデザインで開いた先のフォーム全体のプロパティのことです 以前、初心者QAで説明に苦労した記憶を思い出してしまった。 <回答2> フォーム自体には記憶させず(ポップアップ=いいえ状態)、VBAで行う方法もありますが、かなりの労力が必要で手間がかかるので概要だけ記載しておきます(回答1が一番ラクです) VBAサンプルコードを作成するには丸1日かかってしまうので概要だけ記載 (1).AccessWindowを最小化が動作する前に、まず既に開いているフォームが何か解る仕組みを設けなければならない (1A).各フォームが開く際(オープン時イベントなど)に、テーブル等にフォームオブジェクト名を保存 (1B).各フォームが閉じられた際(クローズ時イベントなど)に、(1A)で作成したレコードを削除 (2).AccessWindowを最小化が動作後、既に開いているフォームを一旦デザインで開きなおす(開きなおす手法は(1A)で作成したテーブルを読込み実施する) (3).デザインで開きなおしたフォームに対しフォームプロパティにある「ポップアップ」を「はい」にする。 (4).デザインで開きなおしたフォームに対し実行を行う (5).各フォームが閉じる前に(クローズ時イベントなど)に、(3)の設定を元に戻す (5A).閉じる前にデザインで開きなおす (5B).デザインで開きなおしたフォームに対しフォームプロパティにある「ポップアップ」を「いいえ」にする。 (5C).デザインで開きなおしたフォームを閉じる 結局、上記方法もポップアップをはいに設定し保存しなおしてから実行する手法です 閉じられたときに、元に戻して保存という意味合いになります この場合、既に開いているフォームが再度開きなおすという事で、引数は初期化される形になる問題点もあります 引数も引き継ぐ場合、またさらにどこかに記憶させておく必要がでてしまいます(テーブルなど) 以上でした。

osetee
質問者

補足

どうもご丁寧に回答をありがとうございます このような質問をしたのはフォームだけを表示して利用しているAccessが タスクバーのAccessのアイコンを押すとAccessのWindowが開いてしまいAccessの見栄えが悪くなってしまうため どうにかならないかということで質問させていただきました。 そこで考えたのがタスクバーを押しAccessのWindowが開かれた後 フォームの中のボタンクリック時にAccess Windowの最小化 → 現在開いているフォームをポップアップ で開くVBAがないか模索中です (フォームはポップアップ「はい」にしております) 現在開いているフォームをすべて「閉じる」VBAが Dim intFrm As Integer For intFrm = Forms.Count - 1 To 0 Step -1 DoCmd.Close acForm, Forms(intFrm).Name Next という形であるため 逆に現在開いているフォームを「開く」VBA がないか模索中です どうか、お知恵をかして下さいm__m

関連するQ&A

  • 「DoCmd.OpenForm」が実行できない(vbaでフォームを開きたい)

    「フォーム1を開く」vbaで行ないたいのですが エラーになってしまいます。 Sub test1() DoCmd.OpenForm , acNormal, フォーム1 End Sub は「変数が定義されていません」と表示され (「変数の宣言を強制する」にチェックを入れています) Sub test2() DoCmd.OpenForm , acNormal, "フォーム1" End Sub は「引数は省略できません」となります。 Sub test1() DoCmd.OpenForm , フォーム1, acNormal End Sub Sub test2() DoCmd.OpenForm , "フォーム1", acNormal End Sub これにしても同じでした。 「OpenForm」をヘルプで調べてみたところ 「expression 」と「FormName」が「 必ず指定します。」でした。 「expression 」がないからだめなのでしょうか? すいません、助けてください。 よろしくお願いします。

  • フォームから別フォームを開くには?

    こんにちは。 Access2010を使っています。 開いているフォームから別のフォームを開きたいのですが、その後ろ側のみにワイルドカード(「*」マーク)を入れたいのですが、上手くいきません。 いろいろやってみましたが、「メモリ不足です」となってしまい、上手くいきません。下記コードにどのようにしてワイルドカードを入れたらよいでしょうか? DoCmd.OpenForm "開きたいフォーム名", acNormal, "", "[キー名]=[Forms]![開いているフォーム名]![キー名]", , acNormal ご教授よろしくお願い致します。

  • アクセス2013 フォームが開かない

    お世話になります。 アクセス2013で、フォームを作成したのですが、 突然フォームが、レイアウトビューもしくはデザインビューでしか 開かなくなりました。 デザインビューで起動してから、表示ボタンを押すとフォームは 表示されます。 再起動等はしましたが、状況かわらず。最適化修復も、状況変わらず。 問題のフォームのFORMLOADでSTOP記載し、docmd.openform で 起動しても、そこまで行きません。 VBAのコンパイルをしてもエラーは出ません。 正直、まったく原因が想像できなくて、悩んでいます。 どなたかご存知ではありませんか? よろしくお願いします。

  • Accessの検索フォーム

    以前にも似たような質問をして、その時は解決したのですが、また同じようなことでつまづいて、以前の回答をみて、 そのとおりにやってるつもりなのに、できなくて…。 テーブル1とフォーム1・フォーム2があります。 フォーム1に入力された情報をもとに、テーブル1の内容を検索して、フォーム2に表示するものを作成しています。 テーブル1には「***.***.**.☆」(情報)という形の情報が入っています。 *の部分の桁数は固定で☆は不定形です。(テキスト形式) フォーム1に入力された情報は「(***.***.)**.*」(検索1)や「(***.***.)**.**」(検索2)などです。 ※()内は入力せず テーブル1の情報の9文字目以降と、フォーム1に入力された情報を比べたくて、以下のようなものを作成しました。 (多少省略等があります) condKensaku = "(Mid(Val(テーブル1.情報),9) between " & Val(Me!検索1.Value) & " and " & Val(Me!検索2.Value) & ")" wherecond = condKensaku DoCmd.OpenForm "フォーム2", acNormal, WhereCond これを実行すると 実行時エラー '2501': OpenForm アクションの実行はキャンセルされました。 と出て、デバッグを押すと、 DoCmd.OpenForm "フォーム2", acNormal, WhereCond の行が黄色になります。

  • Accessでコマンドから空のフォームを開くには?(初心者です)

    Access2003を使用して顧客名簿を作成しています。 コマンドボタン「新規入力」を押すと空のフォームが 開くようにしたいのですが、どのようにしたら良いのでしょうか? 一応、初心者なりに Private Sub コマンド4_Click() Dim namae namae = "個人住所フォーム" DoCmd.OpenForm namae, acNormal End Sub まではやったのですが、開いたフォームは名簿の一番最初の方の データでした・・・。

  • OpenForm

    AccessVBAで DoCmd.OpenForm "メインメニュー", acNormal, "", "", , acNormal という記述がありますが、式.OpenForm(FormName, View, FilterName, WhereCondition, DataMode, Window Mode, OpenArgs)で引数を合わせていくと個数があいません。最後のacNormalは、どれでしょうか?

  • フォームが開かない

    「F説明」と言うフォームは存在しているし、ナビゲーションウインドウで、ダブルクリックすると、 フォームは開くのに、なぜかVBAで DoCmd.OpenForm Forms("F説明"), acNormal とすると "実行時エラー2498 指定した式は、 いずれか の引数とデータ型が対応していません。” となります。 このvbaコードは、"F説明"の部分を変数にして使いまわしたいので、ダブルコーテーションで囲える文法にしたいのですが、どこが間違っているのか教えていただけますか。

  • Access2000:フォームのテキストフォームに値を代入Part2

    前回も質問して、また違った改良が入りそうなので質問させていただきます。 マクロに「フォームを開く」を登録し、テキストフォーム値を入れることをこれまで手動でしてきました。 今回VBAを使って自動フォーム登録したいと考えています。 上記マクロをVisualBasic変換し、新たなマクロにこのVisualBasicをプロシージャとして登録させます。 DoCmd.OpenForm "フォーム名", acNormal, "", "", , acNormal 変換後上記のようなフォームを立ち上げるプログラムが生成されました。上記フォームのテキストフォーム部に値を代入させたいばあいどういう記述をしてあげればよろしいでしょうか? テキストフォームの名前は”年月”です。 Me![年月]=date ではうまくいきません。 よろしくお願いいたします。

  • フォームウィンドウを最前面に表示したい(ACCESS)

    ACCESS VBAを使っています。 あるタイミングで、あるフォームを表示させたいのです。 OpenFormを使ってみると、確かにフォームを開くことはできたのですが、実際は既に表示されているWindowの背面に開かれているので、目で確認することはできないのです。 新しいフォームを最前面に表示するにはどのようにしたらよいのでしょうか?

  • DoCmd.OpenForm メソッド (Acce

    DoCmd.OpenForm メソッド (Access)について文法が分かりません。 何卒、お知恵を借りたく存じます。 よろしくお願いします。 やりたい事は従業員番号と期間を指定してフォームを開きたいのです。 おそらく文法が間違えているのではと思っております。 DoCmd.OpenForm "TargetSelection", acNormal, , "[従業員番号]='" & TList & "' AND [日付]= Between #' & Sday & #' And '# & Eday & #'"

専門家に質問してみよう