- ベストアンサー
アクセスから現在開いているエクセルの値を取得したい
アクセスから現在開いているエクセル(BOOK1.xls)のシート1のA1に入っている値を取得するにはどうすればいいでしょうか? アクセスの参照設定の「Exsel 11.0 object Library」 にチェックを入れ Sub Test() Dim ExcelSheet As Object Set ExcelSheet = CreateObject("Excel.Sheet") ExcelSheet.Application.Visible = True MsgBox ExcelSheet.Application.Cells(1, 1).Value Set ExcelSheet = Nothing End Sub とやってみたのですが 新たなエクセルブックが表示され、空白のセルのA1が取得されてしまいます。 「現在開いているBOOK1のシート1」とするにはどうすればいいのでしょうか? ご教授よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
補足です。 前の回答で DOUGLAS_ さんもコード内に書かれていますが、 EXCELファイルをちゃんと閉じないと、EXCELがプロセス上に残ってしまうので、以前のコードに1行加えます。 Sub Test() Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Application.Visible = False ExcelApp.Application.Workbooks.Open "C:\Book1.xls" MsgBox ExcelApp.WorkSheets(1).Cells(1, 1).Value ExcelApp.Application.Workbooks.Close <== 追加です。 Set ExcelApp = Nothing End Sub
その他の回答 (4)
- Itarufox
- ベストアンサー率31% (10/32)
>"[ファイル名]"は「BOOK1.xls」を代入すればいいのでしょうか? >"[BOOK1.xls]"も"BOOK1.xls"もエラーになってしまいました。 この場合、フルパスで指定することになります。 例えば、Cドライブ直下にある場合 ExcelApp.Application.Workbooks.Open "C:\Book1.xls" となります。
お礼
ありがとうございます。
- DOUGLAS_
- ベストアンサー率74% (397/534)
エクセルが起動していなかったり、「BOOK1」が開かれていなかったり、複数のブックが開かれていたり...と、いろいろとあるかとも存じますが、「ExcelSheet」をウォッチ式に追加し、配下のプロパティを ウォッチウィンドウ で眺めながら、いろいろとお試しください。 Sub Test() Dim MyBook As String Dim ExcelSheet As Object MyBook = "D:\hoge\BOOK1.xls" On Error Resume Next Set ExcelSheet = GetObject(, "Excel.Application") 'エクセルが起動していないとき If Err.Number = 429 Then On Error GoTo 0 Set ExcelSheet = CreateObject("Excel.Application") ExcelSheet.Workbooks.Open MyBook MsgBox ExcelSheet.Worksheets("シート1").Cells(1, 1).Value ExcelSheet.Workbooks.Close Set ExcelSheet = Nothing Exit Sub Else MsgBox ExcelSheet.Workbooks("BOOK1.xls").Worksheets("シート1").Cells(1, 1).Value '「BOOK1」が開かれていないとき If Err.Number = 9 Then On Error GoTo 0 ExcelSheet.Workbooks.Open MyBook MsgBox ExcelSheet.Workbooks("BOOK1.xls").Worksheets("シート1").Cells(1, 1).Value ExcelSheet.Workbooks.Close End If Set ExcelSheet = Nothing End If End Sub
お礼
やってみます。ありがとうございます。
- Itarufox
- ベストアンサー率31% (10/32)
起動していないExcelファイルを考慮すると、 Sub Test() Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Application.Visible = False ExcelApp.Application.Workbooks.Open "[ファイル名]" MsgBox ExcelApp.WorkSheets(1).Cells(1, 1).Value Set ExcelApp = Nothing End Sub という感じでしょうか。
お礼
ありがとうございます。 すいません。試してみたのですが "[ファイル名]"は「BOOK1.xls」を代入すればいいのでしょうか? "[BOOK1.xls]"も"BOOK1.xls"もエラーになってしまいました。
- n-jun
- ベストアンサー率33% (959/2873)
起動しているExcelが1個だけなら、 Dim xlapp As Object Set xlapp = GetObject(, "Excel.Application") MsgBox xlapp.Worksheets("Sheet1").Cells(1, 1).Value Set xlapp = Nothing とか?
お礼
うまくいきました。どうもありがとうございました。
お礼
ありがとうございます。