Microsoft Access 掲示板

Application.PrintCommunication = False が反映されない

2 コメント
views
4 フォロー

お世話になっております。

AccessのフォームからExcelの複数のシートにページ設定を行いたいと考え、下記のコードを作りました。

Dim Sht As Variant
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("C:\date\H.xlsm")
Set xlSheet = xlBook.Worksheets(1)

xlApp.Application.PrintCommunication = False

For Each Sht In xlBook.Sheets(Array("A", "B", "C", "D", "E", "F", "G"))

With Sht

With .PageSetup
.PaperSize = 9
.Orientation = 2
.LeftMargin = xlApp.CentimetersToPoints(0.5)
.RightMargin = xlApp.CentimetersToPoints(0.5)
.TopMargin = xlApp.CentimetersToPoints(0.5)
.BottomMargin = xlApp.CentimetersToPoints(0.5)
.HeaderMargin = xlApp.CentimetersToPoints(0.5)
.FooterMargin = xlApp.CentimetersToPoints(0.5)
.zoom = 100
End With
    End With
    
    Next

xlBook.Application.ActiveWorkbook.Save

    xlBook.Close
    xlApp.Quit

    xlApp.Application.PrintCommunication = True

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

このまま実行すると10秒ほどで処理が完了し、理想の処理時間なのですが、Excelファイルを開いてもページ設定はこちらが指定した値にはなっておりませんでした。

xlApp.Application.PrintCommunication = False

このコードを削除すると、こちらの希望する値に変更になっておりましたが、プリンターへのアクセスが多く、処理が完了するまで5分以上かかってしまいます。

もっと効率の良いやり方があればと思い、ご相談させていただきました。
アドバイスがありましたらお教えください。

よろしくお願いします。

みかん
作成: 2021/08/19 (木) 09:12:43
通報 ...
1
hiroton 2021/08/19 (木) 09:36:22 6e3e0@f966d
xlBook.Application.ActiveWorkbook.Save

    xlBook.Close
    xlApp.Quit

    xlApp.Application.PrintCommunication = True

閉じた後に設定の変更って効く(意味がある)んですかね?
あと、設定を有効にする前に保存しているから設定が保存されないのでは?
処理の順番を入れ替えたらどうでしょう?

xlApp.Application.PrintCommunication = True
xlBook.Application.ActiveWorkbook.Save

    xlBook.Close
    xlApp.Quit


ついでに、主体はExcel VBAの話なので、解決が難しいようならExcel VBAに強い質問サイトを探すといいと思います

2
みかん 2021/08/19 (木) 09:53:51 399d8@9128f >> 1

hiroton様

確かにそうですね。。。

xlApp.Application.PrintCommunication = True
xlBook.Application.ActiveWorkbook.Save

    xlBook.Close
    xlApp.Quit

アドバイスの通りに処理を入れ替えてみました。
結果は30秒ほどで処理が完了し、Excel側も希望通りの値に変更になっておりました。

本当にありがとうございました。