「見かけと印刷結果がずれる」ことに対し、自分なりに
解決策を考えてきました。
印刷範囲を設定したターゲットのシートをコピーし、新しいシート(作業シート)を作る。
セルの枠線を非表示にする。
印刷範囲を図としてコピーし、作業シートをすべてクリアする(文字データ、オブジェクト等)。
クリアされた作業シートに図として貼り付ける。
印刷する。
作業シートを保存せずに削除する。
以上の流れを以下のアドインにし、活用しています。
私の環境下(Excel2007)ではうまく動いていますが、何分にも素人ですので責任は持ちかねます。
ご参考になれば・・・
Sub Excel画面のまんま印刷v531()
'
' Macro1 Macro
' ver5.31
' Keyboard Shortcut: Ctrl+q
'
' ---------------
' echoKODA
' 2016.1.15
' ---------------
'
Application.ScreenUpdating = False
On Error GoTo Err
ActiveSheet.Select
ActiveSheet.Copy
Application.Goto Reference:="Print_Area"
Selection.Copy
ActiveSheet.Cells(1, Selection.Columns.Count + 5).Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
Application.Goto Reference:="Print_Area"
With ActiveSheet.PageSetup
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
ActiveWindow.View = xlNormalView
ActiveWindow.DisplayGridlines = False
Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
Selection.Clear
Dim oShape As Shape
For Each oShape In ActiveSheet.Shapes
oShape.Delete
Next
Range("a1").Select
ActiveSheet.Pictures.Paste.Select
ActiveSheet.PrintOut
Application.DisplayAlerts = False
ActiveWindow.Close SaveChanges:=False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Exit Sub
Err:
If ActiveSheet.PageSetup.PrintArea = vbNullString Then
MsgBox "印刷範囲を設定してください。"
Application.DisplayAlerts = False
ActiveWindow.Close SaveChanges:=False
Application.DisplayAlerts = True
Else
MsgBox "申し訳ありません。何らかのエラーが発生しました。"
Application.DisplayAlerts = False
ActiveWindow.Close SaveChanges:=False
Application.DisplayAlerts = True
End If
End Sub