• ベストアンサー

アクセスから現在開いているエクセルの値を取得したい

アクセスから現在開いているエクセル(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」とするにはどうすればいいのでしょうか? ご教授よろしくお願いします。

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

  • ベストアンサー
  • Itarufox
  • ベストアンサー率31% (10/32)
回答No.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

ijuhyg
質問者

お礼

ありがとうございます。

その他の回答 (4)

  • Itarufox
  • ベストアンサー率31% (10/32)
回答No.4

>"[ファイル名]"は「BOOK1.xls」を代入すればいいのでしょうか? >"[BOOK1.xls]"も"BOOK1.xls"もエラーになってしまいました。 この場合、フルパスで指定することになります。 例えば、Cドライブ直下にある場合 ExcelApp.Application.Workbooks.Open "C:\Book1.xls" となります。

ijuhyg
質問者

お礼

ありがとうございます。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

 エクセルが起動していなかったり、「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

ijuhyg
質問者

お礼

やってみます。ありがとうございます。

  • Itarufox
  • ベストアンサー率31% (10/32)
回答No.2

起動していない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 という感じでしょうか。

この投稿のマルチメディアは削除されているためご覧いただけません。
ijuhyg
質問者

お礼

ありがとうございます。 すいません。試してみたのですが "[ファイル名]"は「BOOK1.xls」を代入すればいいのでしょうか? "[BOOK1.xls]"も"BOOK1.xls"もエラーになってしまいました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

起動しているExcelが1個だけなら、 Dim xlapp As Object Set xlapp = GetObject(, "Excel.Application") MsgBox xlapp.Worksheets("Sheet1").Cells(1, 1).Value Set xlapp = Nothing とか?

ijuhyg
質問者

お礼

うまくいきました。どうもありがとうございました。

関連するQ&A

専門家に質問してみよう