関工健児誇りあれ!?

下関のブログです(^^)v 明日見村 MotoG5Plus Windows10 Kindle iPhone Access Excel VBA ALCATEL IDOL4 Zenfone2 ZE551ML CHUWI Hi8 目標は?100kb/s でも読めるアホblog です

ACCESS から EXCEL へ出力! VBA のひな形、作ってみました ~明日見むら~ やってみよう、意外と簡単! アクセス講座

--- 2018-07-07 ---

只今、ブログをお引越し中でございます

も少し、落ち着いたら、

もっとキレイなのをアップします

 

ボランティアAPP がイケそうだったら、まるっとソレでイケると思います

今暫くお待ち下さい

 

---

ACCESS から EXCEL へ出力! VBA のひな形、作ってみました

やってみよう、意外と簡単なのネ!

でも、奥は深いですゾヨ(^^;

とりあえず、以下のひな形をコピペします

後ほど、説明カキコするかも!

(^^)

------------

Option Compare Database
Option Explicit

'(修正履歴)-------------------------------------
'2014-01-01:バグ修正 DoEvents 追加
'-------------------------------------------------

Private DB As Database
Private REC As Recordset
Private SQL As String
'

Public Function FUNC_R3030_OP()

    Call R3030_MAIN

End Function

Private Sub R3030_MAIN()
   
    On Error Resume Next
   
    DoCmd.Hourglass True                '砂時計 ON Screen.MousePointer = 11
    DoCmd.SetWarnings False

    Set DB = CurrentDb
   
    Call R3030_RPT_OP
   
    DB.Close
   
    Set REC = Nothing
    Set DB = Nothing
   
    SQL = ""
   
    DoCmd.SetWarnings True
    DoCmd.Hourglass False

    Interaction.Beep

End Sub

Private Sub R3030_RPT_OP()
   
    Dim OBJ As Object
    Dim SHEET As Object
   
    Dim PATH_COM As String
    Dim PATH_RPT As String
    Dim BOOK_NM1 As String
    Dim BOOK_NM2 As String
   
    Dim X_COL As Integer
    Dim Y_ROW As Integer
   
    Dim w_NM As String
    Dim i As Integer
   
   
'---(基本情報)---
    On Error GoTo err_ex_2          'ERROR EXCEL
   
    'EXCEL 保存元/先 PATH を取得
    PATH_COM = "F:\Redhp300G\APP\COM"
    PATH_RPT = "F:\Redhp300G\APP\RPT"
   
    With [Forms]![F3030_G3印刷]
   
        BOOK_NM1 = "\R3030_R3帳票"
        BOOK_NM2 = "\R3030_R3帳票"
       
        BOOK_NM1 = PATH_COM & BOOK_NM1 & ".xls"      '元:入力・ひな形
        BOOK_NM2 = PATH_RPT & BOOK_NM2 & ".xls"      '先:出力・Excel加工後
       
    End With
   
    'Excel の起動
    Set OBJ = CreateObject("Excel.Application")
   
    OBJ.WorkBooks.Open BOOK_NM1
    OBJ.DisplayAlerts = False       '確認メッセージなしに保存する-->
   
    OBJ.WorkBooks(1).SaveAs BOOK_NM2
    OBJ.DisplayAlerts = True        '-->戻す

    Set SHEET = OBJ.WorkSheets(1)
   
    OBJ.Visible = True
    OBJ.ScreenUpdating = False      '更新:stop
   
    On Error GoTo err_ex_1          'ERROR DB

'******************
'*   P1シート   *   Sheets(1)
'******************
   
    With [Forms]![F3030_G3印刷]

'---(タイトル)---
        w_NM = "作成日:" & Format(Now, "gggee/mm/dd(aaa) hh:nn")
       
        SHEET.Cells(1, 8) = w_NM
   
    End With

'---(明細)---
                                    'ソート順、等クエリ側で設定 ※項目=レコードとエクセルの順番を合わせている
    SQL = "SELECT * FROM Q3030_P1DAT;"
   
    Set REC = DB.OpenRecordset(SQL, dbOpenSnapshot)  '読み取り専用
   
    If Not REC.EOF Then             '条件により抽出されない場合がある!
        REC.MoveLast                'カーソル位置を最後へ
    End If
   
'---(タイトル)---

    w_NM = Format(REC.RecordCount, "#,##0") & " 件"

    SHEET.Cells(1, 5) = w_NM
   
'---(明細)---

    '抽出件数を取得し、空の行をあらかじめ作成し、その後データをセットする
    i = REC.RecordCount
    i = i - 1                       '1行分は作成済の為
   
    Y_ROW = 3                       '基準:行
    X_COL = 1                       '  :列

'   (範囲指定でコピーする方法)
  
    If i < 1 Then GoTo sheet_11
                                    'xlPasteValues = -4163, xlNone = -4142, xlPasteAll = -4104
    SHEET.Rows(Y_ROW).Copy
    SHEET.Rows(Y_ROW + 1 & ":" & i + Y_ROW).PasteSpecial Paste:=-4104, Operation:=-4142, SkipBlanks:=False, Transpose:=False

    OBJ.CutCopyMode = False         '切り取りモードを解除する
    OBJ.WorkSheets(1).Select        '複数シートの時は一旦シートを選択しないとセルを選択できない!
    SHEET.Cells(1, 1).Select        '※上記「貼り付け」時は範囲選択も解除する事!(処理が異常に遅くなる)

sheet_11:
   
    If Not REC.EOF Then             '条件により抽出されない場合がある!
        REC.MoveFirst               'カーソル位置を最初へ
    End If
   
    Do Until REC.EOF

        For i = 0 To REC.Fields.Count - 1
            SHEET.Cells(Y_ROW, X_COL + i) = REC(i)
        Next

        Y_ROW = Y_ROW + 1
        REC.MoveNext
    Loop
   
    REC.Close

'******************
'*   P2シート   *   Sheets(2)
'******************

'''    Set SHEET = OBJ.WorkSheets(2)

err_ex_1:                           '『Normal End 共用』
    OBJ.ScreenUpdating = True       '更新:start
    'OBJ.Visible = True
   
    OBJ.DisplayAlerts = False       '確認メッセージなしに保存する-->
    OBJ.WorkBooks(1).SaveAs BOOK_NM2
    OBJ.DisplayAlerts = True        '-->戻す
   
    GoTo sub_ex
   
err_ex_2:
    On Error Resume Next

    OBJ.Application.Quit
   
    w_NM = "『R3帳票』作成出来ませんでした。" _
        & vbCrLf & "同一名のExcelが起動中の為だと思われます。" _
        & vbCrLf & "一旦、終了させてから再度作成して下さい!"
   
    MsgBox w_NM, vbOKOnly + vbCritical, "(R3030) R3帳票"

sub_ex:
    Set SHEET = Nothing
    Set OBJ = Nothing
   
    w_NM = ""
    PATH_COM = "":  PATH_RPT = ""
    BOOK_NM1 = "":  BOOK_NM2 = ""

End Sub


----------

等角フォントでないとキレイになりませんネ!

メモ帳にでも、コピペしたら見やすくなります

アクセス講座 始めるかも、、、

---

明日見むら

村長さんでした

(^^)/

asumi-mura

by. ACCESS EXCEL VBA

---

ACCESSからEXCELへ出力