ACCESS VBAで別のACCESS(mdb)を起動できますか?

その場合 呼び出し元の
ACCESSは、終了しますか?

できれば終了したほうが良いです。

教えてください。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>ACCESS VBAで別のACCESS(mdb)を起動できますか?


ADOを使って読み書きは出来ます。

>ACCESSは、終了しますか?
>できれば終了したほうが良いです。
結論から言えば無理です。
VBAは現在開いているACCESSから起動しているわけですから現在のMDBを閉じた瞬間にVBAは終了してしまいます。
VBAでなくVBを考えたほうが早いと思いますが
    • good
    • 1

Objectとしては#1さんが言われるとおり難しいでしょう。

。。

Shell 関数を使用して mdb もしくは Access を起動してはいかがでしょうか?
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q別のAccessファイルのフォームを開くには

Win2000、Access2000を使用しています。
「あいうえお.mdb」というファイルのフォーム上のボタンをクリックすると、「かきくけこ.mdb」というファイルを起動してそのファイル内のフォームを開きたいんですが、
「かきくけこ.mdb」を起動することができません。
エクセルやワードを起動する要領ではできないのでしょうか?(マクロの”アプリケーションの実行”とかShell関数とかで)
どなたかおわかりになる方がいましたらお教え下さい。

Aベストアンサー

マクロの”アプリケーションの実行”で行う場合も、Shell関数で行う場合も、
開きたいMDBのパスの前に、MSAccessのExeのパスも付けて実行するとうまくいくと思います。

例:
Shell ("C:\Program Files\Microsoft Office\Office\MSACCESS.EXE C:\かきくけこ.mdb")

Q別MDBのフォームを起動

フォームのボタンをクリックしたら、別のMDBファイルのフォームを起動させたいのです。
そのフォームはMDB起動時に開くフォームとは別のフォームです。
さらに前のMDBファイルは閉じたいので、ハイパーリンクはどうだろう…?
といったかんじです。
お願いいたします。

Aベストアンサー

ランタイムは使ったことないのですが、以下ではどうでしょうか。
(Access を指定しない方法)

  Dim acMdb As Object
  
  Set acMdb = GetObject("D:\Hoge\B.mdb")
  acMdb.Application.Visible = True
  acMdb.Application.UserControl = True
  
  acMdb.Application.DoCmd.OpenForm "フォームB"
  
  Set acMdb = Nothing

※フォームのクローズも acMdb.Application.DoCmd.Close のように

QAccessフォームからの外部アプリ起動方法

お世話になります。
掲題の件、Accessのフォームからボタンをクリックし、
外部アプリケーション(たとえばExcel等)を起動する
ことは可能でしょうか?

起動可能であればどのようなVBA記述をしたら良いか
教えて頂けたら幸いです。

[作成環境]
起動ボタン名: 起動
Excelのパス : 
C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE

以上、宜しくお願い致します。

Aベストアンサー

#2 さんで示された、Access クラブに書いてある方法で、オートメーション・オブジェクトを持つアプリケーションは、書いてあるように登録できます。ただし、トラブルがあると常駐してしまいますので、終わったら、必ず、きちんと閉じてください。

>(たとえばExcel等)
ということで、オートメーション・オブジェクトを持たないもの(Office以外)でしたら、以下のように、標準モジュールに書いて、ボタンに登録してみてください。

ファイル名は、確実に設定してください。

Function OpenApp()
Dim rtn As Long
 rtn = Shell("C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE", vbNormalFocus)
End Function

私は、このコードに関して、エラートラップを入れるべきかは分かりません。不安でしたら、Accessクラブのコードを参考に、エラートラップを入れてください。通常、「ファイル名を指定して実行」で開けるようなら、問題はないはずです。

#2 さんで示された、Access クラブに書いてある方法で、オートメーション・オブジェクトを持つアプリケーションは、書いてあるように登録できます。ただし、トラブルがあると常駐してしまいますので、終わったら、必ず、きちんと閉じてください。

>(たとえばExcel等)
ということで、オートメーション・オブジェクトを持たないもの(Office以外)でしたら、以下のように、標準モジュールに書いて、ボタンに登録してみてください。

ファイル名は、確実に設定してください。

Function OpenApp()
Dim rtn ...続きを読む

Q他のMDBのマクロを実行する方法

すみません。急いでいます。
マクロ実行中のMDBファイルから、他のMDBのマクロを実行する方法を教えてください。

Aベストアンサー

急いでいる時ほど説明は正確・詳細のほうが宜しいかと思いますが
取りあえず、こんな風では?

他のMDBファイル名がフルパスで、f:\db_xp\to.mdb
モジュールの中身を
Sub testTo()
  MsgBox "to のtestTo"
End Sub
とします。
ならば
今開いているmdbに下記のように記述すればto.mdb のメッセージ「to のtestTo」が出ます

Sub test()
  Dim acApp As Access.Application
  Set acApp = New Access.Application
  acApp.OpenCurrentDatabase ("f:\db_xp\to.mdb")
  acApp.Run ("testTo")
  'マクロ不可、プロシージャのみ可
  'testToプロシージャの中からDocmd.runMacro "マクロ名"で呼び出し可です
  acApp.CloseCurrentDatabase
  Set acApp = Nothing
End Sub

ただ、testToの内容によっては動かない場合もありえるかと思います。

別案ですが
Startup コマンド ライン オプション を利用して
Shell("msaccess.exe f:\db_xp\to.mdb /x マクロ名")
とすれば、to.mdb が開き『マクロ名』が実行されます。

※実行できるのは、マクロだけでモジュールは不可です。
マクロから実行したいモジュールを指定するなり、マクロの中に、to.mdb の終了処理も
記述するなり工夫して下さい。

※もし、最適化に関する話なら前回のリンク先をよく読めば解決するはずですけど?

急いでいる時ほど説明は正確・詳細のほうが宜しいかと思いますが
取りあえず、こんな風では?

他のMDBファイル名がフルパスで、f:\db_xp\to.mdb
モジュールの中身を
Sub testTo()
  MsgBox "to のtestTo"
End Sub
とします。
ならば
今開いているmdbに下記のように記述すればto.mdb のメッセージ「to のtestTo」が出ます

Sub test()
  Dim acApp As Access.Application
  Set acApp = New Access.Application
  acApp.OpenCurrentDatabase ("f:\db_xp\to.mdb")
  acApp.Run ("testTo"...続きを読む

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

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

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

Aベストアンサー

docmd.OpenForm フォーム名,,,,,acDialog
とするか
表示させたいフォームの ポップアップのプロパティを
はい に すれば 出来ると思います。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QエクセルVBAでアクセスファイルを開く方法

いろいろ検索してコピペ等でやってみてもだめでした。

エクセルVBAで、エクセルファイルやEXEファイルを開く方法は簡単なのに、
アクセスファイルの開き方がわかりません。

ただ開くだけなのですが、簡単な記述の仕方はありませんか?

Aベストアンサー

Dim acApp As Object

Private Sub CommandButton1_Click()
On Error GoTo Err_CommandButton1_Click
  
  Set acApp = CreateObject("Access.Application")
  acApp.OpenCurrentDatabase "C:\Temp\Db2.mdb"
  acApp.Visible = True
Exit_CommandButton1_Click:
  Exit Sub
Err_CommandButton1_Click:
  MsgBox Err.Description
  Resume Exit_CommandButton1_Click
End Sub

Private Sub CommandButton2_Click()
On Error GoTo Err_CommandButton1_Click
  acApp.CloseCurrentDatabase
  acApp.Quit
Exit_CommandButton2_Click:
  Exit Sub
Err_CommandButton2_Click:
  MsgBox Err.Description
  Resume Exit_CommandButton2_Click
End Sub

エクセルのバージョンが問題かと思いますが・・・。
昨今は、Access から Excel をこのようにして開いています。
その逆バージョンです。

Dim acApp As Object

Private Sub CommandButton1_Click()
On Error GoTo Err_CommandButton1_Click
  
  Set acApp = CreateObject("Access.Application")
  acApp.OpenCurrentDatabase "C:\Temp\Db2.mdb"
  acApp.Visible = True
Exit_CommandButton1_Click:
  Exit Sub
Err_CommandButton1_Click:
  MsgBox Err.Description
  Resume Exit_CommandButton1_Click
End Sub

Private Sub CommandButton2_Click()
On Error GoTo Err_CommandButton1_Click
  acApp.CloseCurrentD...続きを読む

QAccessからExcelのファイルを起動する

Accessのフォーム上にボタンを作成して
クリックすると特定のExcelのファイルが起動する
ようにしたいのですが、簡単な手はありませんか?

Aベストアンサー

こんにちは。maruru01です。

Shell関数を使って、

Shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE ファイル名"

とします。
ちなみに、Excelの実行ファイルのパスは環境によって違ってきます。

あと、Excelの実行ファイルのパスがわからなくても、ファイルに関連付けられたアプリケーションで開くには、API関数のShellExecute関数を使用します。
API関数については、WEB上で検索して下さい。
このサイトの過去の質問でもヒットするかも知れません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報