• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access開いているブックのセル値参照)

VBAを使用してAccess開いているExcelブックのセル値を参照する方法について

このQ&Aのポイント
  • AccessのVBAから既に開いているExcelブックのセルの値を参照する方法について教えてください
  • 現在のコードでは、セルの値を参照しようとするとインデックスが有効範囲外のエラーが発生しています
  • Excelブック自体をオブジェクトとしてセットし、それを利用してセルの値を参照する方法を知りたいです

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

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

> ここで既に開いているExcelブック自体をWorkbooks.open を使用せずにオブジェクト自体をset > して、各シート値を参照することができないでしょうか。 そういうときは、GetObject 関数の出番です。 対象のブックが開かれていないとエラーが発生します。 必要なエラー処理を追加すること。 多分、ネットにサンプルは山ほどあるでしょう。 以下は、開かれているブックを参照するだけのコードですが ブックを閉じて、エクセルも終了させるなら コメントをはずしてください。 Sub test() ' Dim myXls As Object Dim myBook As Object Dim mySheet As Object Set myBook = GetObject("C:\Test\Sample.xls") ' Set myXls = myBook.Application Set mySheet = myBook.Worksheets("Sheet1") Debug.Print mySheet.Cells(1, 1).Value ' myBook.Close False ' Set myBook = Nothing ' myXls.Quit ' Set myXls = Nothing MsgBox "完了" End Sub

kktaro88
質問者

お礼

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

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

普通はオブジェクトを設定して外部ファイルを 開くので、同じAccessファイルでも同様です。 しかし、他のファイルとしてのAccessファイル と同様に、早い、遅い、の問題ならば、Excelのsheetを テーブルとしてリンクするならば早いです。 テーブルとしてリンクする方法は、 http://office.microsoft.com/ja-jp/access-help/HP005187610.aspx?redir=0 リンク設定後、たとえば Sub cc() Debug.Print DLookup("F1", "sheet1") End Sub あるいは、DAOを使用して Sheet1のF1のデータをすべて 表示するならば、 Sub kk() Dim db As Database Dim rs As Recordset Set db = CurrentDb Set rs = db.OpenRecordset("sheet1") Do Until rs.EOF Debug.Print rs!F1 rs.MoveNext Loop End Sub のようにできます。 リンクした場合はシートの名前がAccess側で テーブル名として登録されます。 なお、Accessのバージョンによってはリンクした シートは参照専用になります。この場合は 参照でいいのでそのまま使用できます。

kktaro88
質問者

お礼

処理速度が速そうですね。テストしてみます。ありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

dim myxls as object dim mybook as object dim mysheet as object 'ダミー set myxls = createobject("Excel.Application") 'これはエクセルアプリケーションオブジェクト set mybook = myxls.workbooks.open("c:\test\test.xls") 'どこかではブックを開かないと始まらない debug.print mybook.worksheets("Sheet1").cells(1, 1).value mybook.close false set mybook = nothing myxls.quit set myxls = nothing msgbox "quit"

関連するQ&A

専門家に質問してみよう