No.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をそのボタン名にしてください。
試して見てください。
遅くなりましたが、ありがとうございました。無事解決しました。今まで試していたのですが、
Dim xlApp As Excel.Application
のところでエラーが出て、ユーザー定義型は定義されていません。というメッセージが出てたのですが、参照設定でエクセルにチェックを入れたら大丈夫でした。毎日の作業なので大変助かります。
No.3
- 回答日時:
了解です。
>もしも、単に、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 側で、上手にできればもっとよいのですが……。
遅くなりましたがありがとうございました。
>これを、一旦、VBAに変換してみて、その中身をみて、DoCmd.OutPutTo の内容を決めてください。良くコードをみて、編集してください。
すみません、自分なりに色々やってみたのですが、分りませんでした。結果的には上の方ので解決はしたのですが、もっと勉強して、このコードも理解できるようにいたします。
No.2
- 回答日時:
>アクセスでエクセルにマクロの出力コマンドを使用して出力しています。
できたら、どのように出力しているのかコードを教えてください。
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が、ハングしました。
早速のご返答ありがとうございます。
>できたら、どのように出力しているのかコードを教えてください。
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を
コントロールするマクロは、そんなに難しいものではないと思います。
出力するのは、印刷方向:横、余白:最小、と毎回毎回決まっていますので、
上記のマクロでそれが可能でしょうか?
No.1
- 回答日時:
アクセスでは無理だと思います。
エクセルの同じファイルにインポートするのなら少し工夫すればできるかもしれません。
印刷用のシートを別に作成し、出力コマンドで作成されるシートとリンクさせます。
出力コマンドで作成されるシートの空白欄が”0”と表示されると思います。
「ツール」→「オプション」→「表示」でゼロ値のチェックを外せば表示されません。
数値に0がある場合困りますが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【Excel】複数シートがあるエクセルデータで片面印刷と両面印刷設定がシートごとに入 1 2023/03/10 15:25
- Excel(エクセル) エクセルでA3用紙を印刷し、余白を全て0にしてもかなりの余白が出てしまいます。その場合は拡大設定する 1 2022/11/29 01:08
- Word(ワード) Wordでの印刷サイズについて A4の原稿をB5サイズで出力したいとき、 印刷から用紙サイズの指定か 4 2022/04/30 09:51
- Excel(エクセル) エクセルのマクロ設定 1 2023/04/05 19:37
- プリンタ・スキャナー インクジェットプリンターで画用紙の厚紙は印刷しても大丈夫ですか? 6 2022/11/16 19:23
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) エクセルで条件付き書式を使わずにセルの文字の色を変える方法を教えて下さい 8 2023/07/28 01:15
- Excel(エクセル) エクセルのマクロで複数シートを両面印刷するには? 2 2022/12/08 23:23
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- プリンタ・スキャナー プリンターでペーパークラフトの用紙設定はどれに設定すればいいでしょうか? 1 2022/10/02 17:49
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで上下に同じ書類を作成す...
-
EXCELでA4用紙に余白ナシで印刷...
-
Wordのページ設定を初期化したい
-
Excelで・・・1ページあたりの...
-
至急です。 課題でA41枚、1600...
-
エクセルで作った表(上下2つ...
-
アクセスで、レポートの幅がペ...
-
エクセルを余白なしでPDF化したい
-
PDFデータに余白を作る
-
ワードパッド 横 切れ
-
Excel(エクセル)で用紙の中央...
-
見開き2ページのPDFを1ページに...
-
アクセスのレポート印刷がうま...
-
パワーポイント印刷時の余白設...
-
画像の比率について。 部活動の...
-
Word文(はがき)の余白を小さ...
-
エクセルの余白のようなもの
-
エクセルで、常に余白線を表示...
-
余白が左右均等になりません。
-
VBAによる用紙サイズ変更(PrtDe...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで上下に同じ書類を作成す...
-
Excelで・・・1ページあたりの...
-
EXCELでA4用紙に余白ナシで印刷...
-
Wordのページ設定を初期化したい
-
エクセルを余白なしでPDF化したい
-
見開き2ページのPDFを1ページに...
-
アクセスで、レポートの幅がペ...
-
エクセルで作った表(上下2つ...
-
ワードパッド 横 切れ
-
Excel(エクセル)で用紙の中央...
-
PDFデータに余白を作る
-
至急です。 課題でA41枚、1600...
-
VisualStudioで、コードを印刷...
-
LibreOfficeのCalcの印刷に関す...
-
エクセルでA3用紙を印刷し、余...
-
access2003 レポートを中央に印...
-
エクセルの余白のようなもの
-
ルーズリーフに印刷したい
-
パワーポイント印刷時の余白設...
-
エクセルで、ページが自動で縮...
おすすめ情報