• ベストアンサー

アクセスからエクセルのUserForm1を表示させたい

オフィス2003です。 アクセスのフォーム上にコマンドボタンを置き、 クリックイベントでエクセル上に作成してある UserForm1を表示させたいです。 案の定 Sub CB_Click() Excel.UserForm1.Show End Sub ではだめでした。 どういう方法がありますか? よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.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が出た。 不十分な点が有るかもしれないが、骨格はこんなところかと思う。

dfghhj
質問者

お礼

ご回答ありがとうございます。 よく調べてみます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 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 '-------------------------------------------

dfghhj
質問者

お礼

エクセルのマクロを実行させればいいんですね。 ご回答ありがとうございます。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

AccessからExcelを起動し、指定ブックを開いて、その中のマクロを実行させる事は可能ですので、そのマクロでUserForm1.Showを実行すればお望みの事ができると思いますが、それから何をなさりたいのか、よかったら教えて下さい。 http://sanryu.net/acc/tips/tips300.htm

dfghhj
質問者

お礼

ありがとうございます。 何をやりたいかと言うと、 アクセスで処理している同時にエクセルのフォームを呼び出し、次の作業の準備をしたかったのです。