• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:test1からの実行かどうかを取得する方法は)

test1からの実行かどうかを取得する方法は

このQ&Aのポイント
  • test1からtest2のプロシージャを実行するVBAコードを書いた場合、test2のファイルからtest1からの実行かどうかを取得する方法はあるのか
  • Debug.Print Application.UserControlを使用すると、自分で起動したか、オートメーションを使って他のアプリケーションによって起動されたかを判定できるが、オートメーションを使って他のアプリケーションによって起動された場合、どのファイルから起動されたかを取得する方法はあるか

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

  • ベストアンサー
回答No.1

べたな方法しかないと思います。 Test2で Sub プロシージャ名(optional opt as string) if opt <> "" then msgbox opt end if ・・・ としておいて Sub Test1 ・・・ Set acApp = New Access.Application With acApp .OpenCurrentDatabase "C:\test2.accdb" .Visible = True .Application.Run "プロシージャ名",currentproject.fullname ・・・ のように必要に応じて引数に渡してあげるとか・・・ プロシージャ名を Optional 付にしていますので不要であれば .Application.Run "プロシージャ名" のように引数なしで呼び出します。

AKVIMBUCSL
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBからaccess UserControl

    vb.netから 【VB】-------------------------------------------- Sub AccOpen() Dim AccApp As Access.Application Dim MyPath As String MyPath = "○○.accdb" AccApp = CreateObject("Access.Application") AccApp.OpenCurrentDatabase(MyPath) AccApp.Visible = True AccApp.UserControl = True End Sub -------------------------------------------------- でアクセスのファイルを開いているのですが、 アクセスの標準モジュールで 【access】-------------------------------------------- Sub test() MsgBox "The user started Access: " & Application.UserControl End Sub ---------------------------------------------------- を実行すると、Trueが返ってくるのですが、正しくはFalseなのではないでしょうか? アクセスのヘルプをみると、 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・  True 現在のアプリケーションはユーザーによって起動されました。 False 現在のアプリケーションは、オートメーションを使って他のアプリケーションによって起動されました。 と書かれています。 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・  AccOpenはvbで実行しているので、 「オートメーションを使って他のアプリケーションによって起動されました。」 に該当するのではないでしょうか?

  • エクセルからアクセスのプロシージャーを実行する

    エクセルからアクセスのプロシージャーを実行する方法を教えてください。 アクセスファイル名→ファイル1.accdb プロシージャー名→test1 なのですが、 エクセルで Sub ACCESSのプロシージャーを実行する() Dim OBJ As Object Set OBJ = GetObject("C:\Users\Desktop\ファイル1.accdb") OBJ.Application.Run OBJ.Name & "!test1" Set OBJ = Nothing End Sub としたら、 実行時エラー 2517 ’Microsoft Access!test1’プロシージャーが見つかりません。 になります。 test1は、アクセスの標準モジュール内に記載しています。 モジュール名も指定しないとだめなのでしょうか? その場合のコードの書き方がわからないので教授ください。 該当のアクセスファイルは既に起動しているときもあるし、してない時もあります。

  • ファイルごしでプロシージャーを実行したい

    アクセスで PW1.accdb PW2.accdb の二つのファイルがあり、どちらも起動してるのですが PW1からPW2のtestというプロシージャーをPW1内で実行することは可能ですか? 参照設定などをすれば可能でしょうか? それともPW2のプロシージャーを使いたいのならば、 PW2のtestというプロシージャーをコピーして、PW1.accdbのモジュールにはり付けるべきでしょうか?

  • 画面のちらつきをやめるにはどうすればいいでしょうか

    アクセスです。 Sub test() Set objAcc = CreateObject("Access.Application") objAcc.OpenCurrentDatabase "C:\test.accdb", False objAcc.Run "プロシージャー" objAcc.Quit Set objAcc = Nothing End Sub ------------------------- 上記のプロシージャーを実行して、他のファイルのプロシージャーを実行しているのですが 毎回ファイルが立ち上がってしまいます。 画面のちらつきをやめるにはどうすればいいでしょうか? DoCmd.SetWarnings False と DoCmd.SetWarnings True を入れてみましたが、無意味でした。 objAcc.OpenCurrentDatabase でアクセスが起動し、 objAcc.Quit で閉じます。 エクセルで例えるのなら、 Application.ScreenUpdating = False みたいなことがやりたいです。

  • 既にファイルが開いているのなら開かない(二重起動防

    アクセス 既にファイルが開いているのなら開かない(二重起動防止)とするには? 自分なりにコードを考えてみたのですが Sub Sample() Dim acApp As Access.Application Set acApp = CreateObject("Access.Application") acApp.OpenCurrentDatabase "C:\test.accdb" '該当のファイルが開いてないのなら、 If acApp.ReadOnly = False Then acApp.Visible = True acApp.UserControl = True End If End Sub これだと、.ReadOnlyがコンパイルエラーになります。 どうやらReadOnlyはアクセスには用意されてない用語のようです。 このような場合どうすればいいでしょう?

  • アクセスからアクセスを立ち上げたいのですが

    オフィス2007です。 アクセスからアクセスを立ち上げたいのですが、うまくいきません。 test1.accdbにフォームとコマンドボタンを設置して、 Private Sub コマンド1_Click() Dim acApp As Object Set acApp = CreateObject("Access.Application") acApp.OpenCurrentDatabase C:\test2.accdb" acApp.Visible = True End Sub を実行したのですが、アクセスのアプリケーションが一瞬だけ開いて、閉じてしまいます。 「 acApp.Visible = True」の部分に、ブレークポイントを設定して、ステップインしてみたところ、 acApp.Visible = Trueでアクセスのアプリケーションが立ち上がり、test2.accdbが表示されますが 「End Sub」で閉じてしまいます。 ずっと開き続けるにはどうすればいいでしょうか?

  • アクセス 他ファイルのプロシージャーを実行したい

    同じローカルに入っている、 アクセスファイル1.accdbから、アクセスファイル2.accdbの標準モジュールのプロシージャーを実行することは可能ですか? アクセスファイル1.accdbで、アクセスファイル2.accdbのプロシージャーを使いたいです。 アクセスファイル1.accdbにアクセスファイル2.accdbのプロシージャーをコピーすればいいのですが 長いので省略したいのです。 アクセス2010です。

  • objAcc.Visible = False 可視

    アクセスからアクセスファイルを開いています。 Set objAcc = CreateObject("Access.Application") objAcc.OpenCurrentDatabase "C:\あああ.accdb", False objAcc.Run "test1" objAcc.Quit Set objAcc = Nothing の様にして、VBAでアクセスファイルを開いてるのですが この時、起動するファイルの可視をFalseにすることは可能でしょうか? Set objAcc = CreateObject("Access.Application") objAcc.Visible = False objAcc.OpenCurrentDatabase "C:\あああ.accdb", False としても、ファイルが開いてるのが見えてしまいます。

  • アクセスからエクセルのプロシージャーを実行させたい

    オフィス2007です。 ////////////////////////////////////////////////////////// ‘Excel側の標準モジュール ////////////////////////////////////////////////////////// Sub Excelのプロシージャー() MsgBox "Excelです" End Sub ////////////////////////////////////////////////////////// ‘Access側の標準モジュール ////////////////////////////////////////////////////////// Sub Accessのプロシージャー() Dim xlsWB As Object Dim MyFileName As String MyFileName = "D:\Accessからプロシージャーの実行テスト用ファイル.xlsm" Set xlsWB = GetObject(MyFileName) xlsWB.Application.Run xlsWB.Name & "!Excelのプロシージャー" Set xlsWB = Nothing End Sub の状態で、アクセス側から Accessのプロシージャー実行すると、 ////////////////////////////////////////////////////////// マクロ'Accessからプロシージャーの実行テスト用ファイル.xlsm!Excelのプロシージャー' を実行できません。 このブックでマクロが使用できないか、 またはすべてのマクロが無効になっている可能性があります。 ////////////////////////////////////////////////////////// となります。 エクセル側は、「すべてのマクロを有効にする」にしているし、エクセルファイルを単独で開き、 Excelのプロシージャーを実行すると問題なく動きます。 同じ条件で、2003で検証すると問題なく動きます。(拡張子は適宜変えてます) エクセルのパスが間違ってるのかな?と思い、適当なパスに変えたところ、 「オートメーション操作中にファイル名またはクラス名を見つけられませんでした。(Error 432)」 というエラーがでたので、パスは合ってます。 原因がわかる方、ご回答よろしくお願いします。

  • プロシージャ名の取得

    教えてください。 VBで現在実行しているプロシージャ名を取得指定のですがkのようなことは可能ですか? 可能ならばどのようにすればいいか教えてください。 現在実行ファイルにて起動しているのですが、どこかで「実行エラー」が発生しています。 この実行エラーの場所の特定のために、現在起動中のプロシージャ名をログに保存しようかと考えています。 また、その他このようなエラー箇所特定方法などがありましたら教えてください。 環境:VB6.0  Win2000

専門家に質問してみよう