- ベストアンサー
アクセスからエクセルのUserForm1を表示させたい
オフィス2003です。 アクセスのフォーム上にコマンドボタンを置き、 クリックイベントでエクセル上に作成してある UserForm1を表示させたいです。 案の定 Sub CB_Click() Excel.UserForm1.Show End Sub ではだめでした。 どういう方法がありますか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ACCESSとエクセルは、プログラム的には、別世界(別単位)なんだから、Access側で直接 UserForm1.Show を書いてもダメ。 (1)Objectライブラリの存在(エクセル持っておれば問題ない) (2)参照設定(使いますよと仁義を切る) (3)実際にAccessが動いている世界で、エクセルのオブジェクトを使えるようにする。CreateObject("Excel.Application") (4)エクセルVBA類似のコードを書く。 (5)(4)では、#2でおっしゃっていることほか、特有の注意事項がある。 が必要です。 --- 質問ズバリのコードは見つからないでしょうが、Googleで 「Access エクセルを開く」などで照会すると、ACCESSからエクセルの世界に入る部分のコードは良く出てくる。 http://www.serpress.co.jp/access/vba016.html など。 objExcelをいつも先頭につけるようにして、やってみてください。 ただし、開くまでは、上記のWEBの例は、下記が判りやすいと思う。 Sub test04() Set objExcel = CreateObject("Excel.Application") objExcel.workbooks.Add '新しいワークブックを開く objExcel.Visible = True 'Excelを表示する objExcel.workbooks.Open "XXX.xls" objExcel.ScreenUpdating = True 'Excelの画面を更新する Set objExcel = Nothing End Sub このObjectの系列はobjExcelーブックーシートーセル(Range)です。 しかしUserFormはこの系列外です。このオブジェクトを捉えるやり方は、私には、その先が情報を得にくい。 そこで、ユーザーフォームを表示するプログラムを実行するのだと考えて エクセルの、今問題にしているブックのModule1に Sub test02() UserForm1.Show End Sub をつくり、 Access側のModuleに Sub test04() Set objExcel = CreateObject("Excel.Application") 'objExcel.workbooks.Add '新しいワークブックを開く objExcel.Visible = True 'Excelを表示する Set wb = objExcel.workbooks.Open("XXXX.xls") objExcel.Run wb.Name & "!Module1." & "test02" objExcel.ScreenUpdating = True 'Excelの画面を更新する Set wb = Nothing Set objExcel = Nothing End Sub のようなコードを作る。 Access側で実行すると、エクセルのUserForm1が出た。 不十分な点が有るかもしれないが、骨格はこんなところかと思う。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 ExcelのUserForm で操作する場合は、終了のタイミングが計れませんので、xlApp.Quitは、エラーが発生しない限りは、そのまま、残したほうがよいです。そのまま、xlApp のオブジェクトをSet で解除してはいけません。良く使うようでしたら、参照設定したほうがよいのですが、あまり頻繁でないようなら、CreateObject("Excel.Application")やGetObject で良いと思います。今回は、参照設定はしないほうが良いかも……。 '------------------------------------------- Sub TestCallExcel() Dim strFname As String Dim xlApp As Object Dim xlBook As Object '参照設定:Microsoft Excel xx Object Library 'Set xlApp = New Excel.Application '参照設定しない場合 Set xlApp = CreateObject("Excel.Application") On Error GoTo ErrHandler 'Excelの標準パスにあるブック名 strFname = xlApp.DefaultFilePath & "\TestBook1.xls" xlApp.Visible = True Set xlBook = xlApp.Workbooks.Open(strFname) xlApp.Run xlBook.Name & "!Macro1" '標準モジュールにあるマクロ名 Exit Sub ErrHandler: 'エラーが発生したらオブジェクトをオフにする If Err.Number > 0 Then MsgBox Err.Description End If xlApp.Quit Set xlBook = Nothing Set xlApp = Nothing End Sub '-------------------------------------------
お礼
エクセルのマクロを実行させればいいんですね。 ご回答ありがとうございます。
- mitarashi
- ベストアンサー率59% (574/965)
AccessからExcelを起動し、指定ブックを開いて、その中のマクロを実行させる事は可能ですので、そのマクロでUserForm1.Showを実行すればお望みの事ができると思いますが、それから何をなさりたいのか、よかったら教えて下さい。 http://sanryu.net/acc/tips/tips300.htm
お礼
ありがとうございます。 何をやりたいかと言うと、 アクセスで処理している同時にエクセルのフォームを呼び出し、次の作業の準備をしたかったのです。
お礼
ご回答ありがとうございます。 よく調べてみます。