ExcelのVBAからAccessを起動し、エクセルファイルのインポートを行っています。
この処理を行うと、その後エクセルを閉じてもプロセスにエクセルが残ってしまいます。
なぜこうなってしまうのか判りません。よろしかったら教えてください(><)
一応コードを書いてみます。TransferSpreadsheetのコードを実行しない場合はゾンビエクセルは残らないので、それが原因だとは思うのですが他の方法がわかりません。
よろしくお願いいたします。
Dim appAccess As Object
Dim acImport, fname As String, ffname As String
acImport = "acImport"
fname = ThisWorkbook.Path & "\取込.mdb"
ffname = ThisWorkbook.FullName
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase fname
appAccess.DoCmd.TransferSpreadsheet , 8, _
"torikomi", ffname, True, "torikomi"
Set appAccess = Nothing
No.1ベストアンサー
- 回答日時:
こんばんは。
現象は確認しました。
.Net では、COMで、こういう問題は知っていましたが、思ってみた方法は試してみましたが、ことごとく失敗しました。今、私は、どうしてよいのか分かりません。
苦肉の策というのか以下のようにはして見ましたが、お世辞にも上手いとは言えません。通常は、Excelからエキスポートではなくて、Access側からインポートさせるというのが通例なので、こうした現象は、分かりませんし、また、一般的に、Excel側からだと、Accessには、ADOなどを使って取り込ませますね。一応、二重起動を防止させるとか、そこまでする必要はないと思います。
まあ、参考までにしてください。きちんと書くなら、ADOなどからのほうがよいですね。
Access2003 なら、OFFICE11 ですが、実際に合わせて直してください。
Sub TestExport()
Dim appAccess As Object
Dim fname As String, ffname As String
Dim xlApp As Object
fname = ThisWorkbook.Path & ""\取込.mdb"
ffname = ThisWorkbook.FullName
rtn = Shell("C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE", vbHide)
With GetObject(, "Access.Application")
.OpenCurrentDatabase fname
.DoCmd.TransferSpreadsheet , 8, "torikomi", ffname, True, "torikomi"
.CloseCurrentDatabase
.Quit
End With
End Sub
Wendy02様
何度か質問に答えていただき、いつもありがとうございます。
確かに通常はACCESSから処理しているのですが、今回はどうしてもEXCELから行う必要があり、困っていました。
頂いたコードを実行してみたのですが、やはりプロセスが残ってしまいました。
ADOやVB.NETなど手をつけたこともなく、ちょっと難しいです。
でも、私のコードではACCESSが画面に出てしまっていたのが解消され、大変助かりました。
>一応、二重起動を防止させるとか、そこまでする必要はないと思います。
この言葉にヒントを得て、エクセルのファイルの方を見直してみることにしました。
いろいろ試行錯誤してなんとか成功したのでコードを載せます。
Sub アクセス変換()
Application.ScreenUpdating = False
Dim WB As Workbook
Sheets("取り込み").Select
Sheets("取り込み").Copy
Set WB = ActiveWorkbook
WB.SaveAs ThisWorkbook.Path & "\torikomi.xls"
WB.Close False
Dim appAccess As Object
Dim fname As String, ffname As String
Dim xlApp As Object, rtn
fname = ThisWorkbook.Path & "\取込.mdb"
ffname = ThisWorkbook.Path & "\torikomi.xls"
rtn = Shell("C:\Program Files\Microsoft Office\OFFICE10\MSACCESS.EXE", vbHide)
With GetObject(, "Access.Application")
.DoCmd.SetWarnings False
.OpenCurrentDatabase fname
.DoCmd.TransferSpreadsheet , 8, "torikomi", ffname, True, "torikomi"
.CloseCurrentDatabase
.Quit
End With
On Error Resume Next
Kill ThisWorkbook.Path & "\torikomi.xls"
End Sub
No.2
- 回答日時:
こんにちは。
Wendy02です。すみません。私が手抜きした結果は、結局ダメだったということですね。
コードをみさせていただきました。それで上手くのですね。
まったく、想像がつかないというか、それは、なぜ、成功しているのか、良く分かりません。
一応、私の回答はマクロが主なので、そのままではみっともないので、ADO を使ってみました。^^; 一応、格好がつくと思います。
ExcelのVisual Basic Editor のメニューの
ツール-参照設定-Microsoft ActiveX Date Object xx.x Library (xx.x は数字)にチェックを入れてください。
「.AddNew」の部分のあとに、
フィールド名とセルの列を書き入れてください。
マクロは、自ブック(ThisWorkbook) からになっていますが、違うようでしたら、その部分を、ActiveWorkbook に修正してください。
一応、こちらでは、プロセスの残骸は、今度は、ちゃんと確認しましたが、そちらでもお調べください。
'--------------------------------------------
Sub ExportMacroR()
Dim MyPath As String
Dim DbName As String
Dim i As Integer
Dim xlRng As Range
'名前の定義登録
Set xlRng = Range("torikomi")
Dim cnADO As New ADODB.Connection
Dim rsADO As New ADODB.Recordset
MyPath = ThisWorkbook.Path & "\"
DbName = "取込.mdb"
Set cnADO = New ADODB.Connection
cnADO.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & MyPath & DbName
Set rsADO = New ADODB.Recordset
rsADO.Source = "torikomi"
rsADO.ActiveConnection = cnADO
rsADO.CursorType = adOpenStatic
rsADO.LockType = adLockOptimistic
rsADO.Open
With rsADO
For i = 2 To xlRng.Rows.Count
.AddNew
'ここを書き換えてください。例:
![日付] = xlRng.Cells(i, 1).Value
![売上] = xlRng.Cells(i, 2).Value
.Update
Next i
End With
rsADO.Clone
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
Set xlRng = Nothing
End Sub
お礼がものすごく遅くなり申し訳ありません。
検証してから・・・と思ったのですが、時間が取れず、遅くなってしまいました。
せっかく、丁寧な回答いただいたのに礼儀知らずで申し訳ありませんでした。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Excel(エクセル) エクセル2019でPDFファイル名に枝番号をつけたい。 アクティブワークシートを印刷した後の処理とし 4 2023/06/06 21:00
- Visual Basic(VBA) バックグラウンドのプロセスのエクセルを閉じる方法 4 2022/05/12 15:39
- Excel(エクセル) このコードに追記事項の仕方を教えて下さい。 以下のコード内容に出てくる。セルH3が空白の場合、エラー 4 2023/08/03 00:22
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
この仕組み作りはエクセルの何...
-
貼り付けをマクロで禁止させたい。
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
VBA シートの切り替えができな...
-
【ExcelVBA】sheet作成時にマク...
-
IEのActiveXダウンロードがブロ...
-
オペランドが足りませんとコメ...
-
『MacBook OS X Mid 2007』初期...
-
マクロ実行ボタンがコピー出来ない
-
Access2007 DoCmd.ApplyFilter...
-
エクセル シート内のハイパー...
-
エクセルで数字9個の並び順の組...
-
エクセル/マクロ Exit Subが実...
-
win10プレビュー版をインスト時...
-
漢字名のテーブルとカラムのCRE...
-
アクロバットリーダーが!
-
JWWでDXFファイルを開きたい
-
GhostからWin XPがインストール...
-
MacBook とMacBook のテレビ電話
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
貼り付けをマクロで禁止させたい。
-
エクセルでコメント挿入した部...
-
エクセルのスピンボタン
-
VBAで写真参照→写真サイズ変...
-
エクセルでスケジュール作成
-
あみだくじの横線の本数の求め方
-
ゾンビエクセル・・・(Exc...
-
マクロでエクセル内のアウトラ...
-
エクセルやワードを使ってらっ...
-
エクセルからアクセスDBを操作する
-
VBAでHPをエクセルシートへコピ...
-
エクセルでテキストファイルか...
-
この仕組み作りはエクセルの何...
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
【ExcelVBA】sheet作成時にマク...
-
エクセル/マクロ Exit Subが実...
-
オペランドが足りませんとコメ...
-
mfc42.dllファイルってなんです...
-
pythonでrequestsが使えない
おすすめ情報