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

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

ただいまの
回答率

90.49%

  • VBA

    1802questions

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

  • Excel

    1539questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • Access

    432questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 239

napoleon

score 12

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』がきちんと終了できていないということでしょうか??
ご教示お願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m6u

    2018/07/03 15:23

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

    キャンセル

  • napoleon

    2018/07/03 15:38

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

    キャンセル

回答 3

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/03 16:49

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

    キャンセル

+1

んー、なんで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 16:57 編集

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

    Object Libraryは追加していました。

    キャンセル

check解決した方法

0

SaveをExcelで

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • VBA

    1802questions

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

  • Excel

    1539questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • Access

    432questions

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