dポイントプレゼントキャンペーン実施中!

ACCESSのVBAマクロでEXCELファイルを指定してデータを取得しようとしています。

GetObject("C:\ファイル名.xls", "Excel.Sheet")

でEXCELファイルを取得するまでは良いのですが、そのファイルのシートを指定する方法がわかりません。

基本かもしれませんが、ご教示をお願いします。

A 回答 (2件)

こんにちは。



Accessで使っているとき、マクロ側でExcelが起動されていることがあるのでしたら、GetObjectも考慮に入れたほうがよいのかもしれませんね。

それを考慮しなければ、オートメーション・オブジェクトは、
Set xlApp = CreateObject("Excel.Application")
だけでよいです。

'GetObject をお使いの場合は、
Dim xlApp As Object
Const MYPATH As String = "○○○"
Const FILENAME As String ="××××"
'
'オートメーション・オブジェクトの生成
On Error Resume Next
 Set xlApp = GetObject(, "Excel.Application") '起動済Excelの取得
  If TypeName(xlApp) = "Empty" Then
    '起動済Excelが無い時新規作成
   Set xlApp = CreateObject("Excel.Application")
  End If
On Error goto 0
'
xlApp.Visible = True 'どちらでも可
With xlApp.Workbooks.Open(MYPATH & "\" & FILENAME)
 .Worksheets("Sheet1").Select
 '作業
 .Close False
End With
'以下を忘れると、後々、悲惨なフリーズの原因です。
Set xlApp = Nothing
'

でも、

例えば、Excelを開いて加工するのでなければ、このような方法もありかと思います。(myTableにインポートする)

DoCmd.TransferSpreadsheet acImport, , "myTable", MYPATH & "\"FILENAME", True, "Sheet1!A1:D50

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

詳細な説明ありがとうございます。

複数のファイルからデータを集めてデータベース化するマクロを作っています。

下のデータが全くTableを意識したフォーマットになってないので、隠せるから一つづつ値をとる方法をとってます・・・。

#本題からはそれますが、実は一つ目のファイルを開いた後二つ目を開こうとしたところでエラーが出て頭を抱えてます。Set xlApp = Nothingはちゃんとしてるのですけど・・・。

エラーメッセージは以下のとおり。

実行時エラー'7'
メモリーが不足しています。

もともとDDEでデータを取っていたのですが、ファイルが開きっぱなしになるのと、他でGetObjectを使っているので全体的な統一を取るためにGetObjectで書き直しをしてます。

お礼日時:2005/12/13 14:06

Dim oApp As Object



Set oApp = CreateObject("Excel.Application")

oApp.Workbooks.Open Filename:="C:\ファイル名.xls" 'EXCELファイルをオープン
oApp.Worksheets("sheet1").Select 'sheet1を指定する

通常はこんな感じですが
    • good
    • 0
この回答へのお礼

ありがとうございます。m(_ _)m

GetObjectでも同じようですね。

お礼日時:2005/12/13 13:59

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A