- ベストアンサー
VBAを使用してAccess開いているExcelブックのセル値を参照する方法について
- AccessのVBAから既に開いているExcelブックのセルの値を参照する方法について教えてください
- 現在のコードでは、セルの値を参照しようとするとインデックスが有効範囲外のエラーが発生しています
- Excelブック自体をオブジェクトとしてセットし、それを利用してセルの値を参照する方法を知りたいです
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> ここで既に開いている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
その他の回答 (2)
- piroin654
- ベストアンサー率75% (692/917)
普通はオブジェクトを設定して外部ファイルを 開くので、同じ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のバージョンによってはリンクした シートは参照専用になります。この場合は 参照でいいのでそのまま使用できます。
お礼
処理速度が速そうですね。テストしてみます。ありがとうございました。
- keithin
- ベストアンサー率66% (5278/7941)
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"
お礼
できました。ありがとうございます。