痔になりやすい生活習慣とは?

AccessからExcelのデータを読み込んだ後、Accessを終了させてもプロセスが終了しません。
bookはclose、applicationはquit、オブジェクト変数はnothingというExcelの終了記述をしているので他の問題なのかと思いいろいろ調べて試しましたが解決できません。

Excelのファイル名とシート名はAccessのフォームに貼り付けたテキストボックスの値を取得させていますが下記コードでは省略しています。環境はWin2000Server、Access2000です。
どなたかお気づきの点があればどうぞご教授お願いします。

---------------------------------
Public Sub test()

Dim filename As String
Dim sheetname As String
filename = "c:\パス\ファイル名.xls"
sheetname = "シート名"

'AccessからExcelをオブジェクトとして開く
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(filename)
Set xlSheet = xlBook.Worksheets(sheetname)

'Excelの行取得用変数設定
Dim xlrow As Integer 'データ開始行
xlrow = 5

Dim xlrowEnd As Integer 'データ最終行(最終行は合計値が入っているので-1とする)
xlrowEnd = (Range("A5").End(xlDown).Row) - 1


'Excelデータの取り込み
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset

rs.Open "a", cn, adOpenKeyset, adLockOptimistic
cn.Execute "delete * from a"

xlrow = 5 'Excelデータの開始行番号

Do While xlrow <= xlrowEnd

rs.AddNew
rs!フィールド1 = xlSheet.Cells(xlrow, 1).Value
rs!フィールド2 = xlSheet.Cells(xlrow, 2).Value
rs.Update
rs.MoveNext
xlrow = xlrow + 1
Loop

'Excelの終了記述
xlBook.Close
xlApp.Quit

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

'ADO接続終了記述
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

このQ&Aに関連する最新のQ&A

A 回答 (1件)

> xlrowEnd = (Range("A5").End(xlDown).Row) - 1


この行が問題です。
上位のオブジェクトから記述しないと
プロセスが残ります。

xlrowEnd = (xlSheet.Range("A5").End(xlDown).Row) - 1
にしてください。
    • good
    • 1
この回答へのお礼

ありがとうございます!!

見事にExcelのプロセスがありません!!

感謝感謝です!!m(__)m

いろいろ検索している中で
「外部からExelを操作する時にApplication→Workbook→WorkSheetの関係を明示的に示す必要がある」という記述を見つけたのですが、
私がいろいろいじくるとエラーばかり返されすっかり途方にくれていました。
本当にありがとうございました。m(__)mm(__)m

お礼日時:2007/11/07 18:20

このQ&Aに関連する人気のQ&A

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

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

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESSからexcelブックを開いて保存したい

ACCESS初心者です。
仕事でどうしても必要に迫られて、受付管理のツールを作ることになりました。


1つの注文で、受付ID(オートナンバー)が付与されます。

メインフォームにタブオーダーをつけてサブフォームを複数配置しています。
そのサブフォームにボタンを置いて
Access から既存のエクセルファイルをテンプレートとして開いて
テンプレートに入力後、受付IDをファイル名にして、テンプレートとは別もので保存
保存後は、ボタンを押したときに受付IDと同じエクセルファイルが開く

このようなことをやりたいと思っています。

ネットでいろいろ探しているのですが
ファイルを開くのは見つかっても、保存したものを開くのが見つからず
そもそもできるのかどうかもわかっておりません。

自分にスキルがなく、あれこれ凝ったものは作れないので、
保存は自動じゃなくて、自分で別名で保存にしてもかまわないのですし
フォームに入力したものが、テンプレートに反映(出力?)されなくてもかまわないです。


参考になるサイト等ありましたら、ご教示いただけますか。

どうぞよろしくお願いいたします。


下記はやりたいことに近いかなと思って見つけたサイトです。
http://www.nurs.or.jp/~ppoy/access/access/acX013.html
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1220895032
http://accessclub.jp/bbs/0227/beginers70136.html

ACCESS初心者です。
仕事でどうしても必要に迫られて、受付管理のツールを作ることになりました。


1つの注文で、受付ID(オートナンバー)が付与されます。

メインフォームにタブオーダーをつけてサブフォームを複数配置しています。
そのサブフォームにボタンを置いて
Access から既存のエクセルファイルをテンプレートとして開いて
テンプレートに入力後、受付IDをファイル名にして、テンプレートとは別もので保存
保存後は、ボタンを押したときに受付IDと同じエクセルファイルが開く

このよう...続きを読む

Aベストアンサー

1番目のリンクの方のサイト、すごいですね。テクニカルかつ分かりやすいです。
同じ方のサイト、#001ではEXCELファイルを新規に作って、データベース内のデータを埋めて保存して閉じる
やり方を紹介しています。
http://www.nurs.or.jp/~ppoy/access/access/acX001.html

リンクの#013では、テンプレートを元にデータを埋め込み、EXCELの画面を表示したところで、マクロを終了させる
(保存はユーザーの手動に任せる)方法を紹介しています。

この#013の最後に#001の保存方法を組み合わせれば、たぶん出来ると思います。

#013の末尾(http://www.nurs.or.jp/~ppoy/access/access/acX013.html)
--------------------------------------------------------------
'データ貼り付け
With wkb.Worksheets(stSheet)
.Range(stRng).CopyFromRecordset Data:=rst
End With

'#001の保存コード(http://www.nurs.or.jp/~ppoy/access/access/acX001.html)

'保存ダイアログからの入力を受けて保存
' fName = xls.Application.GetSaveAsFilename(,"Microsoft Excel(*.xls),*.*", 1)

'保存ダイアログを使わず、fnameを自動的に指定する方法(jacob-wk9付け足し)
fName=rst!受付ID

If fName <> False Then
wkb.SaveAs FileName:=fName
MsgBox "新規ブックは、「" & fName & "」の名前で保存しました!", vbOKOnly
Else
MsgBox "新規ブックは保存できませんでした。", vbOKOnly
End If

Set rst = Nothing: Set cnn = Nothing

Exit_opnXLtmp:
Set wkb = Nothing: Set xls = Nothing
Exit Sub

Err_opnXLtmp:
MsgBox Err.Description
Resume Exit_opnXLtmp
End Sub
----------------------------------------------------------------------

こんな感じになるのではないでしょうか。

1番目のリンクの方のサイト、すごいですね。テクニカルかつ分かりやすいです。
同じ方のサイト、#001ではEXCELファイルを新規に作って、データベース内のデータを埋めて保存して閉じる
やり方を紹介しています。
http://www.nurs.or.jp/~ppoy/access/access/acX001.html

リンクの#013では、テンプレートを元にデータを埋め込み、EXCELの画面を表示したところで、マクロを終了させる
(保存はユーザーの手動に任せる)方法を紹介しています。

この#013の最後に#001の保存方法を組み合わせれば、...続きを読む

QExcelのプロセスが消えません

Excelを普通に起動して閉じた後、タスクマネージャで確認すると、EXCEL.EXEのプロセスが残っています。
ファイルを開いた場合も、空で起動した場合も同様です。
さらに、終了後もEXCEL.EXEのプロセスが多くのメモリを消費しており(200MB以上)、CPU使用量も高くなっています。これでは困るので、毎回強制的に落としています…。

このような症状なのですが、解決策はありますでしょうか。
念のため、ウイルスチェックとOfficeアップデートを試してみましたが改善しません。
どなたかご存知でしたらご教示ください。

Microsoft Windows XP Professional Version 2002 SP2
Microsoft Office Excel2003 SP2

Aベストアンサー

一応、やってみることとしては、次の手順で操作してみたら如何でしょうか。

(1) 「ファイルを指定して実行」で[名前]欄に Excel /s と入れ、[OK]します。

 (または、スタートから[すべてのプログラム]内の Microsoft Office Excel2003 を
 Ctrlキーを押しながら起動しても良い。)

(2) もし上記 /s 起動で「・・・見つかりません」のときは、下記の1行をコピーして
  [名前]欄に貼り付けてください。 " " を含めフルパスで指定します。

 "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /s

 これでExcelが、Safe Mode で起動になっていることを確認します。
 (Excelのタイトルバーに セーフ モードが付加されてていることを確認します。)

(3) Excel(セーフモード)を終了し、少し経過後プロセスを確認します。

(4) これで正常の場合で、メニュー/ツールバー等のユーザ設定部分が、初期化しても
  良いなら、次の操作を行います。

  C:\Documents and Settings\ユーザ名\Application Data\Microsoft\Excel

  の中にある XLSTART フォルダ と Excel11.xlb ファイルを削除します。
 (XLSTARTフォルダ および Excel11.xlb は、再起動で、新らしく作成されます。)

  これで、通常の方法で起動し、正常か確認します。

(5) これでもダメなら、Excel.EXE およびその構成ファイルの異常の可能性があり、
  ユーザの操作範囲外のため 一旦、Office(Excel)をアンインストールし、更にインストールした
 ホルダ( C:\Program Files\Microsoft Office\OFFICE11 )(標準インストールした場合)ごと
 削除後に 再インストールしてみるとよいでしょう。

一応、やってみることとしては、次の手順で操作してみたら如何でしょうか。

(1) 「ファイルを指定して実行」で[名前]欄に Excel /s と入れ、[OK]します。

 (または、スタートから[すべてのプログラム]内の Microsoft Office Excel2003 を
 Ctrlキーを押しながら起動しても良い。)

(2) もし上記 /s 起動で「・・・見つかりません」のときは、下記の1行をコピーして
  [名前]欄に貼り付けてください。 " " を含めフルパスで指定します。

 "C:\Program Files\Microsoft Office\OFFICE11\EXCEL....続きを読む

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QVBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。

Sub 繰り返し()
'繰り返し
Dim s As Integer
For s = 0 To 17
Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select
Range("cells(8,s+2)").Activate
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _
"cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).Name = "=""0810p2x"""
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "0810p2x"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t"
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Next
End Sub

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義...続きを読む

Aベストアンサー

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな(Excelで表示されている)シートが上位オブジェクトとして、自動的に認識されます。

≪例2≫
Sheets("Sheet2").Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、Rangeのみシート名が記述されています。
Sheets("Sheet2").Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
Activeなシートが、Sheet2の場合はエラーになりません。
しかし、ActiveなシートがSheet2以外の場合、エラーが発生します。
直前に、
Sheets("Sheet1").Select
などとしていれば、ActiveシートがSheet1になっていますから、エラーになります。

Sheets("Sheet2").Range(Sheets("Sheet2").Cells(8, 1), Sheets("Sheet2").Cells(1587, 2)).Select
と書いておけば安心です。
Withステートメントを使えばスッキリ纏めることができます。
With Sheets("Sheet2")
  .Range(.Cells(8, 1), .Cells(1587, 2)).Select
End With

# Sheets("Sheet2")の上位オブジェクトが省略されていることにも気がついてください。

>そこで自分で基礎を勉強したいのですが推薦できる参考書などがござ
>いましたら、教えていただけませんか?
私自身は、入門書程度の雑誌を1冊買っただけです。どれが良いとかはよく分かりません。
「マクロの記録」を活用して、参考コードを取得し、汎用性のあるコードに編集しています。
新しい単語があれば、文字カーソルを単語の上に置き、F1キーを押してVBAのヘルプを必ず見るようにしています。
躓いた時は、Web検索して欲しい情報を得たり、あるいは、こうした掲示板で先輩方のお力をお借りしています。

Excel(エクセル)VBA入門:目次
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=4651404
エクセル入門・初級編
http://www.kenzo30.com/excel_kiso.htm

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな...続きを読む

Q既に開いているエクセルを閉じるには?

既に該当のファイルが開いているのなら閉じたいのですが
xlBook.Quitだとエラーになります。

Sub test1()
Dim xlApp As Excel.Application
Dim xlBook As Workbook
Dim FileName As String

FileName = "C:\test.xlsm"

Set xlApp = GetObject("", "Excel.Application") 'GetObjectで合ってるか不安
Set xlBook = xlApp.Workbooks.Open(FileName)

If xlBook.ReadOnly = True Then 'ファイルが開いてるのなら
MsgBox "既にファイルが開いているので閉じます。"
xlBook.Quit 'エラー 438
End If

xlApp.Quit 'これって何のために必要?

Set xlBook = Nothing 'ココを通り過ぎるのにすごく時間がかかる。
Set xlApp = Nothing
End Sub

と言うコードを作りました。
xlBook.Quitがダメならどのコードを使えばいいでしょう?

また、
GetObject("", "Excel.Application")
と言う開き方でいいのでしょうか?

あと、
xlApp.Quit
は何のために必要なのでしょう?

タスクマネージーのプロセスを見ると、
Set xlApp = GetObject("", "Excel.Application")
を通る時に新しいEXCEL.EXEが作成され、
Set xlApp = Nothing
を通り過ぎる時に、そのEXCEL.EXEが消えます。

だから
xlApp.Quit
は不要ですか?

既に該当のファイルが開いているのなら閉じたいのですが
xlBook.Quitだとエラーになります。

Sub test1()
Dim xlApp As Excel.Application
Dim xlBook As Workbook
Dim FileName As String

FileName = "C:\test.xlsm"

Set xlApp = GetObject("", "Excel.Application") 'GetObjectで合ってるか不安
Set xlBook = xlApp.Workbooks.Open(FileName)

If xlBook.ReadOnly = True Then 'ファイルが開いてるのなら
MsgBox "既にファイルが開いているので閉じます。"
xlBook.Quit 'エラー 438
End If

xlAp...続きを読む

Aベストアンサー

少し考えて、こんな風に
既存のExcelが立ち上がっていた場合でも
下の処理中にトラブルがあっても巻き添えにしないために
新たなインスタンスを作成して、その中で処理した方が安全と考えます。
InUse関数はネットワーク上で他人が開いていた場合にも有効です。

Sub test1a()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim FileName As String

FileName = "C:\test.xlsm"

'開いているかチェック
If InUse(FileName) <> 0 Then
MsgBox "ファイルが見つからないか、既に開かれています"
Exit Sub
End If

Set xlApp = GetObject("", "Excel.Application") '新規にExcelのインスタンスを作成
'Set xlApp = CreateObject("Excel.Application") ’こちらでも可
Set xlBook = xlApp.Workbooks.Open(FileName)

If xlBook.ReadOnly Then '読み取り専用
MsgBox "既にファイルが開いているので閉じます。"
GoTo CloseP
End If

If xlBook.MultiUserEditing Then '共有モードも閉じて良い?
MsgBox "共有モードで開かれていますので閉じます。"
GoTo CloseP
End If

xlApp.Visible = True '必要に応じて
'ここいら辺から本番の処理

CloseP: '終了処理
xlBook.Close SaveChanges:=True 'で良かったのかな?
Set xlBook = Nothing '解放
xlApp.Quit 'Excel の終了
Set xlApp = Nothing
End Sub

Function InUse(ByVal FileName As String) As Integer
'メモ帳などのような'ファイルをロックしないアプリが開いていた場合は機能せず。
'Excelファイルが共有モードで開かれていた場合も、0 が返ります。
'FileName にはフルパスで渡すこと
Dim fNo As Integer
fNo = FreeFile
On Error Resume Next
Open FileName For Input Access Read Lock Read Write As fNo

Select Case err.Number
Case 0 '開かれていない
InUse = 0
Case 53 'ファイルが見つからない
InUse = 1
Case 70 '開かれている
InUse = 2
Case Else 'ここに来た経験は無いのですが念のため
InUse = 3
End Select

Close fNo

End Function

少し考えて、こんな風に
既存のExcelが立ち上がっていた場合でも
下の処理中にトラブルがあっても巻き添えにしないために
新たなインスタンスを作成して、その中で処理した方が安全と考えます。
InUse関数はネットワーク上で他人が開いていた場合にも有効です。

Sub test1a()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim FileName As String

FileName = "C:\test.xlsm"

'開いているかチェック
If InUse(FileName) <> 0 Then
MsgBox "ファイルが見つからないか、既に開かれて...続きを読む

QAccess-VBAでExcelファイルを作成する。

こんにちわお世話になります。

「Excelにエクスポート」ボタンをクリックすると、Inputboxか何かが表示されて、Pathやファイル名やシート名を入力し、「実行」ボタンを押すと、新規にExcelのBookを、そのPath、ファイル名、シート名で作成する。その後、そのシートにデータを書き込むという作業をしたいのです。
AccessのデータをExcelの任意のシートを開いて書き込むという部分のVBAコードはわかりますので、新規Book作成部分のコードがわかるかたお願いします。
Office97を使用しています。

Aベストアンサー

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
  Dim xlSheet As Excel.Worksheet

  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Add
  Set xlSheet = xlBook.Worksheets(1)

  ' Excel のセルに値を代入します。
  xlSheet.Cells(1, 1).Value = " "

  ' Worksheet を名前をつけて保存します。ダイアグボックス等を使用して
   パスやBook名など入力できるようにしてもOKです。
  xlSheet.SaveAs "c:\Temp.xls"

  xlApp.Quit

  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing
End Sub

こんな感じでしょうか。

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
...続きを読む

QACCESS側からEXCELの書式を設定するには?

ACCESSからEXCELにエクスポートした際、ACCESS側でEXCELの書式設定は行えますか?(例:セルAの幅がX桁等)

データ件数が多すぎて、下記VBでエクスポート処理をしています。

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

お手数ですが、ご教授願います。

Aベストアンサー

例えばボタンにエクスポートの処理を書いているのでしたら
ボタンをCmd1とすると

Private Sub Cmd1_Click()
On Error GoTo Err_Cmd1_Click

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("\XX.xls")
Set xlSheet = xlBook.Worksheets(1)

xlApp.Cells.Select
xlApp.Cells.EntireColumn.AutoFit
xlApp.Range("A1").Select
xlApp.Visible = False

xlApp.Quit

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

Exit_Cmd1_Click:
Exit Sub

Err_Cmd1_Click:
MsgBox Err.Description
Resume Exit_Cmd1_Click

End Sub

こんな感じで記述してください。

#1の中でxlApp.DisplayAlerts = False これは除いてください。保存しますかのメッセージが出ます。

例えばボタンにエクスポートの処理を書いているのでしたら
ボタンをCmd1とすると

Private Sub Cmd1_Click()
On Error GoTo Err_Cmd1_Click

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("\XX.xls")
Set xlSheet = xlBook.Worksheets(1)

xlApp.Cells.Select
...続きを読む

QAccessからExcelのファイルを起動する

Accessのフォーム上にボタンを作成して
クリックすると特定のExcelのファイルが起動する
ようにしたいのですが、簡単な手はありませんか?

Aベストアンサー

こんにちは。maruru01です。

Shell関数を使って、

Shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE ファイル名"

とします。
ちなみに、Excelの実行ファイルのパスは環境によって違ってきます。

あと、Excelの実行ファイルのパスがわからなくても、ファイルに関連付けられたアプリケーションで開くには、API関数のShellExecute関数を使用します。
API関数については、WEB上で検索して下さい。
このサイトの過去の質問でもヒットするかも知れません。

QACCESS(VBA)でエクセルファイルを開く時

VBAでエクセルファイルを開いて処理していますが
一つのエクセルファイルを開いている時に(これは手操作)
VBAからエクセルファイルを開くと
一瞬、開いたような反応を示すのですが
すご、閉じてしまい
用を足しません
こんな時、VBAで今開こうとするエクセルファイルを
優先的に開けたら、と思いますが
むりでしょうか?
よろしくお願いします

Aベストアンサー

以下の方法で開けませんか?

Sub ExcelCreate()
Set MyExcel = CreateObject("excel.application")
'MyExcel.Workbooks.Open FileName:="C:\test.xls" '<---既存のエクセルブックを開く場合
MyExcel.Workbooks.Add '<---新しくエクセルを生成する場合
MyExcel.Visible = True
End Sub

QAccess VBAよりExcelのシート名を取得

お世話になります。
Access2010
Windows7 Pro

以下のページを参考にしましたが、「実行時エラー3170 インストール可能なISAMドライバーが見つかりませんでした。」と表示されてしまいます。

http://www.accessclub.jp/bbs5/0005/vba1231.html
Dim Db As DAO.Database
Dim Tbl As DAO.TableDef
Dim xlsFile As String

xlsFile = "ファイルパス"
Set Db = OpenDatabase(xlsFile, True, True, "Excel 14.0;") ←ここで止まる
For Each Tbl In Db.TableDefs
If Right$(Tbl.Name, 1) = "$" Or _
Right$(Tbl.Name, 2) = "$'" Then
'シート名の最後は必ず$が付きます
Debug.Print Tbl.Name
End If
Next Tbl
Db.Close
Set Db = Nothing

なお、参照設定にて「Microsoft DAO 3.6 Object Library」にチェックが入っていないことが原因かと思い、チェックを入れようとしましたが「この名前は既にあるモジュール、プロジェクト、オブジェクトライブラリで使われています。」というメッセージが表示され、チェックを入れることができません。

勉強不足で大変恐縮ですが、これらのメッセージからどういうことが分かりますでしょうか。
ご教授の程、宜しくお願い致します。

お世話になります。
Access2010
Windows7 Pro

以下のページを参考にしましたが、「実行時エラー3170 インストール可能なISAMドライバーが見つかりませんでした。」と表示されてしまいます。

http://www.accessclub.jp/bbs5/0005/vba1231.html
Dim Db As DAO.Database
Dim Tbl As DAO.TableDef
Dim xlsFile As String

xlsFile = "ファイルパス"
Set Db = OpenDatabase(xlsFile, True, True, "Excel 14.0;") ←ここで止まる
For Each Tbl In Db.TableDefs
If Right$(Tbl.Name, 1) = "$" Or _
Right$(...続きを読む

Aベストアンサー

Set Db = OpenDatabase(xlsFile, True, True, "Excel 14.0;") ←ここで止まる

Set Db = OpenDatabase(xlsFile, True, True, "Excel 12.0;") '←ここで止まる
ならOffice2010では出来ましたよ?
アプリケーションのバージョンではなくファイルのバージョン指定っぽいです。

ちょっと蛇足かもしれんが、参考になると思われます。
・・・本来 Null でない Excel 列内の一部の値が Null として返されることがあります・・・
http://support2.microsoft.com/kb/194124/ja

>この名前は既に・・・
Microsoft DAO 3.6 Object Library の上位バージョンの
Microsoft Office 14.0 Access Database Engine Object Library に
チェックが入っていれば OK です。


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

人気Q&Aランキング