プロが教えるわが家の防犯対策術!

おしえてくださいm__m

AccessにてWindowを最小化した後に現在開いているフォームを開くVBAを

作成しようとしていますがうまくいきません。

現在はWindowを最小化した後一つのフォームを開くVBAは下記の通り作成しました

DoCmd.RunCommand acCmdAppMinimize

DoCmd.OpenForm "メインフォーム", acNormal

しかしながら現在開いているすべてのフォームをAccess Windowを最小化した後に

開くVBAはどのように記載すればいいでしょうか

皆さまのお知恵をかしてくださいm__m

A 回答 (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の再表示に関しては
フォームが開いているもの対し、再度開くというのは出来なかった気がします
そこから一旦クローズしてから開きなおす手法を取りますが、その場合、再表示のため
画面入力値が初期化されてしまう欠点があります
欠点回避には、また別の制御(作りこみ)が必要になってきます

以上でした
    • good
    • 0

<抜粋>


現在開いているすべてのフォームを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).デザインで開きなおしたフォームを閉じる

結局、上記方法もポップアップをはいに設定し保存しなおしてから実行する手法です
閉じられたときに、元に戻して保存という意味合いになります

この場合、既に開いているフォームが再度開きなおすという事で、引数は初期化される形になる問題点もあります
引数も引き継ぐ場合、またさらにどこかに記憶させておく必要がでてしまいます(テーブルなど)


以上でした。

この回答への補足

どうもご丁寧に回答をありがとうございます

このような質問をしたのはフォームだけを表示して利用している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

補足日時:2015/01/05 18:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!