質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

3回答

360閲覧

ACCESSとExcelの連携操作について

napoleon

総合スコア18

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

1クリップ

投稿2018/07/03 06:21

編集2018/07/03 07:53

ACCESSからデータを起こし、Excelマクロと連携し製表するまでの処理を行っています。

ACCESSのコード Private Sub Export_Click() Dim RS1 As Recordset, RS2 As Recordset Dim RR As Integer 'ROW Dim CC As Integer 'Cell Dim EE As Object Dim wb As Object Dim ws As Object Dim i As Integer Dim idx1 As Integer, idx2 As Integer Dim CNT1 As Integer, CNT2 As Integer Dim Q_N As String '会社名 Dim LCNT1, LCNT2 Dim GCNT1, GCNT2 Dim RA, RB Dim YMD Dim PP As String Dim MM Dim myQuery Dim QQ Set DB = CurrentDb() For idx1 = 1 To 21   省略(選択した取引先の処理を繰り返しています) Next     ’RS1でセットした内容をExcelにはきだします     Do Until RS1.EOF Set EE = CreateObject("Excel.Application") '本番はfalse EE.Visible = False With EE .ScreenUpdating = True Set wb = .Workbooks.Add Set ws = wb.Sheets("Sheet1") End With   //省略// With EE wb.SaveAs "J:\シミュレート表_2018\" & Q_N & ".xlsx" wb.Close .Quit 'Excel終了 Set EE = Nothing '参照開放 Set wb = Nothing '参照開放 Set ws = Nothing '参照開放 Set RS2 = Nothing '参照開放 End With RS1.MoveNext Loop //マクロ実行処理// Set EE = CreateObject("Excel.Application") EE.Visible = False EE.UserControl = False ’同じフォルダに『Macro』というファイルをセットし、そこから実行しています     Set wb = EE.Workbooks.Open("J:\シミュレート表_2018\Macro.xlsm") Set ws = wb.Sheets("Sheet1")     ’複数の仕入先を処理することがあるため、A1列に会社名をセットし、Do~Loop処理を行います EE.Run "シミュ_Macro" ↓追記 EE.Application.DisplayAlarts = False EE.Quit Set wb = Nothing Set EE = Nothing MsgBox "END" End Sub
Excelマクロ Dim LCNT As Long Dim LCNT1 As Long Dim LCNT2 As Long Dim LCNT3 As Long Dim LCNT4 As Long Dim M_NAME Dim F_NAME Dim HIRAITA_F As String Dim IDX1 As Integer Dim RA, RB, RC Dim YMD Dim WS As Object Dim WN(3) As String Dim Bar Dim PT Dim MM Dim NENGETU As String Dim i As Integer Dim wb As Workbook Do Workbooks(M_NAME).Activate l_cnt = l_cnt + 1 MM = Range("B" & l_cnt) If MM = "" Then Exit Do End If LCNT1 = 1 Workbooks(M_NAME).Activate        //省略// 製表処理しています。      loop '閉じるときにAB列の値を消す Range("A1:B21").Select Selection.ClearContents ’開いているExcelを保存して閉じる For Each wb In Workbooks If Not wb Is ThisWorkbook Then wb.Close SaveChanges:=True End If Next wb   ’Excelファイル『Macro』を閉じる ThisWorkbook.Save

ここまでの処理を、teratailで質問させていただき何とか作成することが出来ました。

ここで困っていることはきちんと任意の選択した仕入先のファイルが作成され、製表を出来てきちんと保存されているのですが、
さて確認してみようと思うと、なぜか作成されたファイルだけ起動しているのに『Macro』ファイルも一緒に立ち上がってしまいます。
そしてACCESSでもう一度処理を行おうとするとずっと実行中(フリーズ?)した状態になってしまします。

処理が終わって『END』が表示されるようにしたので処理が終わった後にタスクマネジャーで確認したところ、Excelは起動していませんでした。

Excel『Macro』がきちんと終了できていないということでしょうか??
ご教示お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/07/03 06:23

で? どういう問題があるのか示してくれないと。
napoleon

2018/07/03 06:38

すいません。間違いってアップしてしまい削除方法が分らず今追記しています。。。申し訳ありません
guest

回答3

0

んー、なんでAcces VBAとExcel VBAを分けて実行しているのか。
Access VBA上からExcelワークシートなどもひっくるめて全部コントロールできるのですけど。
AccessからExcelをどう操作するかは、
参照設定で「Microsoft Excel *. Object Library」ってのを追加すれば、
オブジェクトブラウザが使えるようになるので楽です。

Set EE = CreateObject("Excel.Application")
この行がAccess VBA側で何度か出てきていますが、
これを1回に抑えて処理の中で使い回すように心がけましょう。
Sub/Function冒頭で宣言して、
Sub/Function末尾で開放する流れ。

もちろん、EE.Quitメソッドも呼びましょう。
EE.Application.DisplayAlarts = FalseとしてからEE.Quitすることで、
エラーメッセージを表示することなく強制的な終了になります。
Set EE = Nothingでインスタンス開放されるはずですが、
何かの事情で終了できないときもあるので、

投稿2018/07/03 07:36

編集2018/07/03 07:45
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

napoleon

2018/07/03 08:06 編集

コメントありがとうございます。 最初ACCESS上で一気に処理してみようかと思ったのですが以前こちらで質問させていただいた時に 分けた方がよいとのアドバイスを受けて別々に作成しました。(確かに製表のコードがつらつらと長かったので。。。) 教えていただいたコードを取り急ぎ追加してみたのですが、EE.Application.DisplayAlarts = Falseで実行時エラー438(サポートしていません)が出てしまいました。 Object Libraryは追加していました。
guest

0

問題の切り分けのために、Excelへの参照設定を外しましょう。
>Dim wb As Workbook  ’←Object
>Dim ws As Worksheet '←Object
モジュールの先頭に Option Explicit を書きましょう。
これで、コンパイルエラーは出ませんか?

投稿2018/07/03 07:31

iruyas

総合スコア1067

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

napoleon

2018/07/03 07:49

コメントありがとうございます。 Dim wb As Objectに変更してもコンパイルエラーは出ませんでした。変数の宣言も追記しました。 Excelの一度回してみましたが、やはり『Macro』ファイルが立ち上がってしまいました。 初心者で的外れなことをしていたら申し訳ありません。
guest

0

自己解決

SaveをExcelで

Close、Quit、Nothingの処理をACCESSで行ったら、保存されて閉じることが出来ました。

回答を頂き、ヒントを得ることが出来ました。ありがとうございました。

今後とも宜しくお願い致します。

投稿2018/07/03 08:21

napoleon

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問