お世話になっております。
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分以上かかってしまいます。
もっと効率の良いやり方があればと思い、ご相談させていただきました。
アドバイスがありましたらお教えください。
よろしくお願いします。
閉じた後に設定の変更って効く(意味がある)んですかね?
あと、設定を有効にする前に保存しているから設定が保存されないのでは?
処理の順番を入れ替えたらどうでしょう?
ついでに、主体はExcel VBAの話なので、解決が難しいようならExcel VBAに強い質問サイトを探すといいと思います
hiroton様
確かにそうですね。。。
アドバイスの通りに処理を入れ替えてみました。
結果は30秒ほどで処理が完了し、Excel側も希望通りの値に変更になっておりました。
本当にありがとうございました。