A列に「×」がある行は非表示にして印刷するようにしてみました。
これでダメならステップ実行して一行ずつ動作を確認するしかないですね。もしかしたらマクロが実行されていないかもしれません
余分ですがマクロが実行されたらメッセージを出すようにしました。(8行目)
このメッセージが表示されないなら何らかの理由でマクロが実行されていないということになります。不要になったら8行目は削除して下さい
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim idx, LastR As Long
Const sh1 As String = "プライベート版表示"
Const sh2 As String = "正規版表示"
On Error GoTo end0
With ActiveSheet
If .Name = sh1 Or .Name = sh2 Then
MsgBox("Macroが実行されています")
Application.ScreenUpdating = False
LastR = .Range("A65536").End(xlUp).Row
For idx = 1 To LastR
' If Application.CountA(.Rows(idx)) = 0 Then
If .Cells(idx, "A") = "×" Then 'ここが変わりました
.Rows(idx).Hidden = True
End If
Next idx
Application.EnableEvents = False
.PrintOut
.Range("A1:A" & LastR).EntireRow.Hidden = False
Cancel = True
End If
End With
end0:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
以下のマクロは印刷を行う際に「空白行を印刷しないようにする」ものです。一度試して見ていただけますか? ただし印刷シートが二つあるとのことですので、その印刷シートの名前を3、4行目に入力(書き換え)してください。(指定したシート以外は普通に印刷するようにするためです)
マクロはALT+F11でVBE画面を開き、左上のVBA Projectで該当するBook名の配下の「ThisWorkBook」を右クリックし「コードの表示」で開く画面に貼り付けて下さい。シートに戻り印刷を行うとマクロが実行されます。
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim idx, LastR As Long
Const sh1 As String = "印刷シート1" 'シート名を書き換える
Const sh2 As String = "印刷シート2" 'シート名を書き換える
On Error GoTo end0
With ActiveSheet
If .Name = sh1 Or .Name = sh2 Then
Application.ScreenUpdating = False
LastR = .Range("A65536").End(xlUp).Row
For idx = 1 To LastR
If Application.CountA(.Rows(idx)) = 0 Then
.Rows(idx).Hidden = True
End If
Next idx
Application.EnableEvents = False
.PrintOut
.Range("A1:A" & LastR).EntireRow.Hidden = False
Cancel = True
End If
End With
end0:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
なお、このマクロを組み込むとデータがない行は印刷されなくなってしまいます。もし行間を空けたいなら、空白行のどこかのセルに「スペース」を入力しておけば、印刷時は空白行が印刷されます。
質問者
補足
ご丁寧にありがとうございます。
今試みましたが、うまくいかないようです。
空白行がそのまま印字されます。
念のため、何行か内容を削除し空白行を作ってみましたが
印刷されてしまいます。
手順は以下で試みています。
==============================================================
Alt+F11を押した後ブック直下のThisWorkBookの「コードの表示」を
クリックし、以下の書き換えた内容を貼り付けました。
--------------------------------------------------------------
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim idx, LastR As Long
Const sh1 As String = "プライベート版表示" 'シート名を書き換える
Const sh2 As String = "正規版表示" 'シート名を書き換える
On Error GoTo end0
With ActiveSheet
If .Name = sh1 Or .Name = sh2 Then
Application.ScreenUpdating = False
LastR = .Range("A65536").End(xlUp).Row
For idx = 1 To LastR
If Application.CountA(.Rows(idx)) = 0 Then
.Rows(idx).Hidden = True
End If
Next idx
Application.EnableEvents = False
.PrintOut
.Range("A1:A" & LastR).EntireRow.Hidden = False
Cancel = True
End If
End With
end0:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
===============================================================
また、ブック内に用意されたシートは次の名前です。
・入力シート
・プライベート版表示
・正規版表示
そのままの通りですが、どこか不具合あるでしょうか
あと、説明が足りませんでしたがセル内に書き込みをしてあるのはそれぞれ
正規版表示 = B2~N110
プライベート版表示 = B2~N103
に、なります。
お礼
こんばんわ。 ありがとうございます、うまく行きました! 長い間親切にご指導頂きありがとうございました! 今、ちゃんとプリンターから印刷されて出てきています! あまりに感動的で少し涙が出ている程です。 オーバーかもしれませんが現実で、とても感謝しています! ありがとうございました!!