VB.net 2010 のプログラムで、ExcelからA4サイズの帳票を作り、自動印刷する機能を作っていますが、解決できない点が1つありますので、質問させて頂きました。
実行するPCによって、1枚当たりに印刷できる幅が異なるのです。
画像をご覧いただきたいのですが、画像上段にある"A"はBV列までが、印刷できる範囲です。ところが"B"では、CF列までが印刷範囲となっています。(各列の幅は0.64(9ピクセル)です。)
”ページ設定”の値を見比べましたが、全て同じ設定です。
結果、"B"になってしまうPCで帳票を作ると、BW~CF列の余計な列のせいで、印刷できる帳票のサイズが小さくなってしまいました。
実行したPCの環境は以下のものです。
A画像になったPC Windows7 & Excel2010
B画像になったPC Vista & Excel2007
プリンタは同じプリンタを使っています。
A4で1枚当たりに印刷できる長さを固定に出来ないかご教授ください。
VBの印刷設定~印刷までのソースは次の通りです。
(objAppはExcel.Application、objSht はExcel.Worksheet オブジェクトです)
Dim xlPageSetup As Excel.PageSetup = objSht.PageSetup
With xlPageSetup
.PaperSize = Excel.XlPaperSize.xlPaperA4 '用紙サイズをA4
.Orientation = Excel.XlPageOrientation.xlPortrait
.LeftMargin = objApp.CentimetersToPoints(1.3) '左余白
.RightMargin = objApp.CentimetersToPoints(1) '右余白
.TopMargin = objApp.CentimetersToPoints(1.4)
.BottomMargin = objApp.CentimetersToPoints(1.5)
.FooterMargin = objApp.CentimetersToPoints(1)
.HeaderMargin = objApp.CentimetersToPoints(0.8)
.PrintTitleRows = "$14:$16"
.LeftFooter = "&""MS P明朝,""XXXXXX会社 見積書 (NoXXXXX)"
.RightFooter = "&""MS P明朝,""&P/&N"
.CenterHorizontally = True
End With
objSht.PrintOutEx()
No.4ベストアンサー
- 回答日時:
あと、どこかに
'印刷範囲をA1~BV30にする
ActiveSheet.PageSetup.PrintArea = "$A$1:$BV$30"
の行を挿入して、印刷範囲を固定して下さい。
With xlPageSetup
と
End With
で挟まれた中のどこかに
'拡大縮小を100%にする
.Zoom = 100
を挿入して、拡大率を100%に固定してみましょう。
すくなくとも
.Zoom = 100
で
>印刷できる帳票のサイズが小さくなってしまいました。
は防げる筈です。
chie65535さま
詳しい説明ありがとうございます。
結局A4で印刷できる幅の縮小はできませんでしたが、
教わった内容をヒントに、次の方法で対応できました。
'印刷範囲を定める
Dim intEndRow = objSht.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row
.PrintArea = "A1:BV" & intEndRow
If CInt(objApp.Version) > 12 Then
.Zoom = 100
Else
'印刷結果を拡大する
.Zoom = 112
'横幅を1ページに自動的収める。
.FitToPagesWide = 1
End If
大変たすかりました。ありがとうございます。
No.5
- 回答日時:
こんにちは。
やってみていないので、正確な話ではありませんが、この場合は、Excelの上位互換や下位互換の話とは違うような気がします。
コードをみると、なんとなく違和感を感じます。
理由は、マージンの設定をし直しているからです。私の記憶では、一旦、シートのページを設定したら、それを動かさないようにする、というのが基本だったような気がします。
つまり、一旦、試し印刷でマージン・サイズなどを合わせたら、後はマクロでマージン等の設定をいじらないことだと思います。その設定は、ブックに残されるはずですから、そのシートを使う時には、同じ設定が使えるのだったと思うのです。むろん、マクロで設定できるに越したことはありません。
もう一つは、CentimetersToPoints を使っていることですね。
Excelの印刷の設定というのは、VBのような物理的な設定ではなく、論理計算なので、この計算は、おそらく、丸めが発生しているはずです。InchesToPointsの方が正確なはずです。
要点をまとめると、設定そのものは、手動で設定し、2010と2007で合わせ、その後、マクロではいじらない、もしくは、各バージョンで、実際の印刷に使われた設定を用いる、ということです。
なお、細かいことですが、バージョンによって、枝番がありますから、Val(Application.Version) で数値化し分岐させます。
この回答への補足
WindFallerさま
ご回答ありがとうございます。
CentimetersToPointsではなく、InchesToPointsのほうが正確なのですね。
こちら、修正かけていきます。
今回は雛形をコピーして使用しているのではなく、
VB.netで新規に作っているので、マージン設定を行わないと、
余白がExcelのデフォルト値になるので、余計崩れてしまうかと考えています。
No.3
- 回答日時:
>Excel2007から同じ帳票を作ると、"A"と同じ幅になります。
>しかしVB.netから作成すると"B"のようになってしまうのです。
「VB.net(Excel2010)」は「Excel2007の上位互換」であって「完全互換」ではありません。
「上位互換」ってのは「下位のを読み込んだりはできるけど、設定を完全に同じにしても、まったく同じ物はできませんよ。微妙に差異が出るので、手動で微調整しないといけませんよ」っていう「互換性」です。
一方「完全互換」ってのは「設定を完全に同じにすれば、まったく同じ物が出来ますよ」っていう「互換性」です。
残念ながら、VB.net(Excel2010)は「上位互換」なので、設定をまったく同じにしても、Excel2007とは違う物が出来上がります。
>A4で1枚当たりに印刷できる長さを固定に出来ないかご教授ください。
Excelのバージョンを判定して、バージョンごとに最適な余白を指定して下さい。
.PaperSize = Excel.XlPaperSize.xlPaperA4 '用紙サイズをA4
.Orientation = Excel.XlPageOrientation.xlPortrait
If CInt(Application.Version) > 12 Then
'Excelが2007より新しい場合
.LeftMargin = objApp.CentimetersToPoints(○○○) '左余白
.RightMargin = objApp.CentimetersToPoints(×××) '右余白
(略)
Else
'Excelが2007か、2007以前の場合
.LeftMargin = objApp.CentimetersToPoints(△△△) '左余白
.RightMargin = objApp.CentimetersToPoints(□□□) '右余白
(略)
End If
のようにして、ExcelのVersionを判定して「2007で上手くいく左右余白」と「2010で上手くいく左右余白」を切り替えて下さい。
「Excelのバージョンが違うので、ページ設定の内容をまったく同じにしても、印刷結果が大違い」になります。
Application.Versionの値はStringで
Excel2013:"15.0"
Excel2010:"14.0"
Excel2007:"12.0"
Excel2003:"11.0"
Excel2002:"10.0"
Excel2000:"9.0"
Excel97:"8.0"
Excel95:"7.0"
Excel5.0:"5.0"
となっています。
なお「Excel2013」で実行すると、同じように「2013に合わせた余白の値にしないと、ページレイアウトが崩れる筈」なので「If文の場合分け」を以下のように増やしてください。
If CInt(Application.Version) > 14 Then
'Excel2013の場合
(略)
Else
If CInt(Application.Version) > 12 Then
'Excel2010の場合
(略)
Else
'Excel2007か2007以前の場合
(略)
End If
End If
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 請求書と領収書の作成 4 2022/11/10 16:13
- Excel(エクセル) エクセル2013「次のページ数に合わせて印刷」が小さすぎる 9 2023/03/28 10:18
- その他(Microsoft Office) 複数の写真を1枚に印刷 5 2023/05/05 22:41
- Excel(エクセル) Excelでこういうカードの作り方 枠線の引き方や、挿入画像の拡大縮小など わかる方教えてください、 2 2022/05/03 21:22
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Word(ワード) Wordでの印刷サイズについて A4の原稿をB5サイズで出力したいとき、 印刷から用紙サイズの指定か 4 2022/04/30 09:51
- その他(ソフトウェア) 写真の印刷レイアウトについて 13 2023/05/31 07:20
- プリンタ・スキャナー 封筒印刷 差出人印刷ずれる 4 2022/05/01 10:12
- その他(悩み相談・人生相談) 画像の比率について。 部活動の公演のチケットを作成したいのですが、A4サイズいっぱいに印刷して6枚チ 2 2022/10/08 22:11
- ノートパソコン Windows11homeを新しく購入し、初期設定をしています。 前のパソコンでは無線のFAX機や有 5 2023/04/18 19:50
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VB2010でExcelの行をコピーして挿入する
Visual Basic(VBA)
-
VBで既存エクセルシートを新規ブックにコピー
Visual Basic(VBA)
-
vb.net EXCEL ウィンドウ枠の固定について
Excel(エクセル)
-
-
4
VBでファイルが開かれているかどうかを確認したい
Visual Basic(VBA)
-
5
.NET上でエクセル上に罫線を引く
Visual Basic(VBA)
-
6
VB.NETでExcelのヘッダー出力を制御したい
Visual Basic(VBA)
-
7
【VB.NET】日付型の列にNULLを登録する方法について
SQL Server
-
8
文字数に合わせて、コントロールの幅を設定する方法
Visual Basic(VBA)
-
9
VB.NET+ActiveReports で印刷時の用紙トレイ選択
Visual Basic(VBA)
-
10
vb.netで画面のコントロールId名を変数で動的に制御し処理する方法
Visual Basic(VBA)
-
11
チェックボックスを操作できないようにしたいです VB.NET
Visual Basic(VBA)
-
12
別フォームから戻ったときのイベント
Visual Basic(VBA)
-
13
VB.net Double と Decimal の違い?
Visual Basic(VBA)
-
14
VB.NETで他のプロジェクトで作成したフォームを使う方法
Visual Basic(VBA)
-
15
vb.netからエクセル関数書き込み
Visual Basic(VBA)
-
16
DataGridViewで入力チェック後、フォーカスをあてたい
Visual Basic(VBA)
-
17
VBのReturnの使い方
Visual Basic(VBA)
-
18
VB.NETで小数点以下の桁数を取得したい
その他(ソフトウェア)
-
19
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
20
VBでEXCELのシートのコピーに関して
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba 実数および実数タイプの変...
-
Excelのマクロについて教えてく...
-
VBA レジストリの値の読み方に...
-
Excel VBA 定義されたプロージ...
-
Excel マクロについての相談
-
エクセルVBAについて
-
Vba SelStart、SelLen教えてく...
-
エクセルの合計を自動で表示さ...
-
Excelのマクロでワードのテキス...
-
Excelについて
-
2つのマクロでチェックボックス...
-
VBAに詳しい方教えてください。
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
VBAの質問になります Userform内で
-
VBA listBoxから
-
VBAで各列の"+"と"o"の合計数を...
-
VBA初心者 Ctrl+での操作、ボタ...
-
VBA 複数条件の分岐処理の上手...
-
VB.net(VB)で、フォームにExcel...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBA 定義されたプロージ...
-
Excel-VBAのmsgBox()の不思議
-
【VBA】マクロの入ったファイル...
-
VBA 複数条件の分岐処理の上手...
-
現在のブックを閉じないで、マ...
-
VBAで各列の"+"と"o"の合計数を...
-
VBAに詳しい方教えてください。
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ユーザーフォームに別シートか...
-
エクセルのマクロについて教え...
-
ExcelVBA シート名を複数セルか...
-
エクセルのマクロについて教え...
-
VBA listBoxから
-
Excelのマクロについて教えてく...
-
エクセルのマクロについて教え...
おすすめ情報