電子書籍の厳選無料作品が豊富!

オフィス2003です。

アクセスのフォーム上にコマンドボタンを置き、
クリックイベントでエクセル上に作成してある
UserForm1を表示させたいです。

案の定
Sub CB_Click()
Excel.UserForm1.Show
End Sub
ではだめでした。

どういう方法がありますか?
よろしくお願いします。

A 回答 (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が出た。
不十分な点が有るかもしれないが、骨格はこんなところかと思う。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/16 20:54

こんばんは。



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

'-------------------------------------------
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/16 20:49

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


http://sanryu.net/acc/tips/tips300.htm
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/14 21:09

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