dポイントプレゼントキャンペーン実施中!

アクセスでエクセルにマクロの出力コマンドを使用して出力しています。ただ、日々更新されていますので、それをプリントアウトするときに印刷の設定(用紙サイズとか縦横・余白の大きさ)をエクセルで設定するのが毎回毎回面倒なので出力するときにアクセス側?で設定できないでしょうか?

A 回答 (4件)

>プリントアウトするときに印刷の設定(用紙サイズとか縦横・余白の大きさ)をエクセルで設定するのが毎回毎回面倒なので出力するときにアクセス側?で設定できないでしょうか?


簡単に出来ます。
まずフォームにボタンを作りそのボタンのプロパティのイベント・クリック時のイベントプロシージャに下記の記述を入れてください。
ボタンをCmd1とした場合

Private Sub Cmd1_Click()
On Error GoTo Err_Cmd1_Click

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets.Add

Set xlBook = xlApp.Workbooks.Open("C\フォルダ名\Q_name.xls") 'オープンするファイル名
Set xlSheet = xlBook.Worksheets(1)

xlApp.Visible = False
'シートの印刷設定をします
With xlSheet.PageSetup
.PaperSize = xlPaperA4 '用紙サイズをA4に
.Orientation = xlLandscape '印刷の向きの指定 横=xlLandscape 縦 = xlPortrait
.LeftMargin = xlApp.CentimetersToPoints(1) '各余白をセンチ(Cm)単位で設定
.RightMargin = xlApp.CentimetersToPoints(1)
.TopMargin = xlApp.CentimetersToPoints(1)
.BottomMargin = xlApp.CentimetersToPoints(1)
.HeaderMargin = xlApp.CentimetersToPoints(1)
.FooterMargin = xlApp.CentimetersToPoints(1)
End With

xlSheet.PrintOut   'シートを印刷


xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

Exit_Cmd1_Click:
Exit Sub

Err_Cmd1_Click:
MsgBox Err.Description
Resume Exit_Cmd1_Click

End Sub

これでAccessからQ_name.xlsをページ設定して出力できます。
余白の調整は各Marginの()内の数字を変更してください。単位はセンチです。上記では各余白が1Cmです。
コピペで出来ます。その場合Cmd1をそのボタン名にしてください。
試して見てください。
    • good
    • 0
この回答へのお礼

遅くなりましたが、ありがとうございました。無事解決しました。今まで試していたのですが、
Dim xlApp As Excel.Application
のところでエラーが出て、ユーザー定義型は定義されていません。というメッセージが出てたのですが、参照設定でエクセルにチェックを入れたら大丈夫でした。毎日の作業なので大変助かります。

お礼日時:2005/04/22 19:52

了解です。


>もしも、単に、Excelのプリントアウトだけに使う、Excelブックでしたら、たぶん、
それでしたら、GetObject ですね。

>出力するのは、印刷方向:横、余白:最小、と毎回毎回決まっていますので、
「余白:最小」の設定が分かりませんが、0.5インチぐらいがよいのではないかと思いました。

>自動起動するマクロを作成しました。
 これを、一旦、VBAに変換してみて、その中身をみて、DoCmd.OutPutTo の内容を決めてください。良くコードをみて、編集してください。

 PrintOut Preview:=True
Preview の部分を、False にするか、Preview を含め右側を削除すれば、そのまま印刷します。

「プロシージャーの登録」
「プロシージャー名:Acc2ExcelPrc()」

'標準モジュールへ
Function Acc2ExcelPrc()
 On Error GoTo Excel_Err
 Dim xlApp As Object
 Dim xlBook As Object
 Dim xlSheet As Object
 Dim MyPrintArea As String
 '要:ファイル名を設定
 Const Fn As String = "c:\[フォルダ名]\Q_name.xls"
 Kill Fn '注意:残っている、同名のExcelファイルは削除します。
 DoCmd.OutputTo acQuery, "クエリ", _
    "MicrosoftExcel(*.xls)", _
     Fn, True, ""
 Set xlApp = GetObject(, "Excel.Application")
 Set xlBook = xlApp.ActiveWorkbook
 With xlBook.Worksheets(1)
  MyPrintArea = .Range("A1").CurrentRegion.Address
   With .PageSetup
    .PrintArea = MyPrintArea
    .LeftMargin = xlApp.InchesToPoints(0.5)
    .RightMargin = xlApp.InchesToPoints(0.5)
    .TopMargin = xlApp.InchesToPoints(0.5)
    .BottomMargin = xlApp.InchesToPoints(0.5)
    .HeaderMargin = xlApp.InchesToPoints(0.5)
    .FooterMargin = xlApp.InchesToPoints(0.5)
    .CenterHorizontally = False
    .CenterVertically = False
    .Orientation = xlLandscape '横
    .Draft = False
    .PaperSize = xlPaperA4 'A4
    .FirstPageNumber = xlAutomatic
    .Order = xlDownThenOver
   End With
  .PrintOut Preview:=True
  'Preview:=True を取れば印刷します。
 End With
 xlApp.UserControl = True
Excel_Exit:
On Error Resume Next
 xlBook.Save
 xlApp.Quit
 Set xlBook = Nothing
 Set xlApp = Nothing
 Exit Function
Excel_Err:
 MsgBox Err.Description
 Resume Excel_Exit
End Function

ただ、マクロといいながらも、やはりExcelの印刷設定のスピードが絶望的に遅いです。これは、単に、自動で印刷して、Access まで戻ってくるというものです。

なお、もし、不安な部分があったら、ブレークポイントの代わりに、コード上に「Stop」と書けば、そこで、VBAのコードで止まります。また、Access 側で、上手にできればもっとよいのですが……。
    • good
    • 0
この回答へのお礼

遅くなりましたがありがとうございました。
>これを、一旦、VBAに変換してみて、その中身をみて、DoCmd.OutPutTo の内容を決めてください。良くコードをみて、編集してください。
すみません、自分なりに色々やってみたのですが、分りませんでした。結果的には上の方ので解決はしたのですが、もっと勉強して、このコードも理解できるようにいたします。

お礼日時:2005/04/22 19:58

>アクセスでエクセルにマクロの出力コマンドを使用して出力しています。


できたら、どのように出力しているのかコードを教えてください。
ADO を使っているのですか?

もしも、単に、Excelのプリントアウトだけに使う、Excelブックでしたら、たぶん、CreateObject か、GetObject で、Excel.Application のオブジェクトでExcelをコントロールするマクロは、そんなに難しいものではないと思います。

でも、
>印刷の設定(用紙サイズとか縦横・余白の大きさ)をエクセルで設定するのが毎回毎回面倒なので出力するときにアクセス側?で設定できないでしょうか?
Access側で設定はしていても、一旦、Excelのシートに当ててみないと、うまくないような気がしますね。用紙サイズとか縦横・余白の大きさの設定は、VBA上でもできるかと思いますが、とりあえず、Excelのプレビュー画面まで出すというマクロにしました。

たぶん、マクロがお分かりになる方なら、これだけでも作れるとは思います。
(作成時には、On Error は、外してください。)

Private Sub コマンド1_Click()
 On Error GoTo Err_コマンド1_Click
 Dim xlApp As Object
 Dim xlBook As Object
 Dim MyPrintArea As String
 Dim Fn As String
 Fn = "C:\My documents\Test.xls" 'ファイル名
 Set xlApp = CreateObject("Excel.Application")
 xlApp.Visible = True
 Set xlBook = xlApp.Workbooks.Open(Fn)
 With xlBook.Worksheets(1)
  MyPrintArea = .Range("A1").CurrentRegion.Address
  .PageSetup.PrintArea = MyPrintArea
  'ここで、印刷ダイアログか、プレビューを出して、ユーザー設定させる
  .PrintOut Preview:=True
 End With
 On Error Resume Next
 xlApp.UserControl = True
Exit_コマンド1_Click:
 xlBook.Save
 xlApp.Quit
 Set xlBook = Nothing
 Set xlApp = Nothing
 Exit Sub
Err_コマンド1_Click:
 MsgBox Err.Description
 Resume Exit_コマンド1_Click
End Sub

なお、上記の xlApp.Visible なしで、プレビュー画面だけ出そうとしたら、Excelが、ハングしました。
    • good
    • 0
この回答へのお礼

早速のご返答ありがとうございます。
>できたら、どのように出力しているのかコードを教えてください。
ADO を使っているのですか?
VBAは自分にはまだ敷居が高くて、参考書などのコードを
ファイル名等を変えて、そのままコピーペーストで使っているレベルです。
クエリ名Q_Nameを任意のフォルダ名にQ_name.xlsというファイル名で
自動起動するマクロを作成しました。
マクロのアクション:出力
オブジェクトの種類:クエリ
オブジェクト名:Q_Name
出力ファイル形式:Microsoft Excel (*.xls)
出力ファイル:C\フォルダ名\Q_name.xls
自動起動:はい
テンプレートファイル:空白
エンコード:空白
アクセスのヘルプを見ると、PrtDevModeプロパティみたいな項目があって、
Orientationという項目があったので、出来るかなと思って質問させていただきました。

>もしも、単に、Excelのプリントアウトだけに使う、Excelブックでしたら、たぶん、
CreateObject か、GetObject で、Excel.Application のオブジェクトでExcelを
コントロールするマクロは、そんなに難しいものではないと思います。
出力するのは、印刷方向:横、余白:最小、と毎回毎回決まっていますので、
上記のマクロでそれが可能でしょうか?

お礼日時:2005/04/21 18:06

アクセスでは無理だと思います。


エクセルの同じファイルにインポートするのなら少し工夫すればできるかもしれません。

印刷用のシートを別に作成し、出力コマンドで作成されるシートとリンクさせます。

出力コマンドで作成されるシートの空白欄が”0”と表示されると思います。
「ツール」→「オプション」→「表示」でゼロ値のチェックを外せば表示されません。
数値に0がある場合困りますが・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!