|
コードの意味ですが
Sub R_Hidden_Change()
If ActiveCell.Row <> 3 Then Exit Sub
'もしアクティブセル(ダブルクリックしたセル)の行が 3 以外なら中止
'On Error Resume Next
'これから下でエラーが出たら、それをスキップする
If Hck = False Then
'モジュールレベル変数の値が False なら
If WorksheetFunction.CountA(Range("B4:B65536")) = 0 Then
'もし B4以下のセルに値が入力されていなかったら
MsgBox "B列に値がありません", 48: Exit Sub
'メッセージを出して中止
End If
Range("B4", Range("B65536").End(xlUp)) _
.SpecialCells(4).EntireRow.Hidden = True
'B4〜入力最終行までで、空白セル(SpecialCells(4))の行範囲を非表示に
'する。SpecialCellsメソッドは該当するセルが見つからないとエラーに
'なり、それを事前に検知・回避することが出来ないので、先に On Error 〜
'を入れておいた。
Hck = True
'変数の値を True に変更
Else
'変数の値が True なら
Cells.EntireRow.Hidden = False
'セル全体の行範囲を表示する
Hck = False
'変数の値を False に変える
End If
End Sub
ということになっています。
>集計行含めたエリア
は、例えば B列を基準に最終行を判定し、F列までが表の範囲とするなら
Range("B1", Range("B65536").End(xlUp)).Offset(, -1).Resize(, 5)
になります。ですからここのアドレスを PrintArea プロパティの値に渡してやれば
良さそうなんですが、ちょっとこちらでテストしてみましたが、イマイチうまく
印刷範囲を決定できませんでした。なので印刷時には、それ専用のマクロも入れて
おく、ということで確実な処理をさせるようにします。印刷専用マクロは
Sub MySheet_Print()
Dim PArea As Range
Dim Sh As Worksheet
Dim Ans As Integer
If Hck = False Then Exit Sub
Set PArea = Range("B1", Range("B65536").End(xlUp)) _
.Offset(, -1).Resize(, 5).SpecialCells(12)
On Error Resume Next
Set Sh = Worksheets("MyPrint")
If Err.Number > 0 Then
Set Sh = Worksheets _
.Add(After:=Worksheets(Worksheets.Count)).Name = "MyPrint"
Err.Clear
End If
Sh.Activete: Cells.Clear
PArea.Copy Sh.Range("A1")
Set PArea = Nothing: Set Sh = Nothing
Ans = MsgBox("印刷を開始しますか", 36)
If Ans = 6 Then ActiveSheet.PrintOut Copies:=1
End Sub
というコードでよいでしょう。
あと、この印刷マクロを実行するのに、いちいち「ツール」「マクロ」・・を選択
するのが面倒なら、ダブルクリックイベントで呼び出すマクロで、ダブルクリックした
セルのアドレスを判定し
" A3 セルなら行の表示・非表示切り替え、E3 セルなら印刷マクロを呼び出す"
という形に改造しておくと良いと思います。その場合は R_Hidden_Change を
Sub R_Hidden_Change()
Select Case ActiveCell.Address
Case "$A$3"
GoTo RoLine
Case "$E$3"
Call MySheet_Print
End Select
Exit Sub
RoLine:
On Error Resume Next
If Hck = False Then
If WorksheetFunction.CountA(Range("B4:B65536")) = 0 Then
MsgBox "B列に値がありません", 48: Exit Sub
End If
Range("B4", Range("B65536").End(xlUp)) _
.SpecialCells(4).EntireRow.Hidden = True
Hck = True
Else
Cells.EntireRow.Hidden = False
Hck = False
End If
End Sub
というように変更して下さい。
|
|