2013年04月24日
VBA:いくらでもある事務改善パート2(7)
前回からの続きです。
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善について書いています。
3日の仕事がわずか5分に!夢のような取り組みです。
今日は、印刷処理について考えてみます。
一件の印刷なら、いたって簡単。
印刷プレビューの手順をマクロの記録で作成します。
①実績報告書のシートを選択
②マクロの記録開始
③印刷プレビュー
④印刷ブレビューを閉じる
⑤対象者名簿を選択
⑥マクロの記録終了
の手順で記録してみましょう。
①、② 実績報告書のシートからマクロの記録を開始します。

③ 印刷プレビューを表示させます

④ 印刷プレビューを閉じます。

⑤対象者名簿を選択し、⑥マクロを終了します。

下のようにマクロが記録されたはずです。
Sub Macro1()
'
' Macro1 Macro
'
ActiveWindow.SelectedSheets.PrintPreview
Sheets("対象者名簿").Select
End Sub
赤色の部分を、先日迄作ったプログラムにコピーします。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
Dim obj As Object
r = Target.Row
対象者 = Sheets("対象者名簿").Range("d" & r)
Set obj = Workbooks("実績.xlsx").Worksheets("実績データ").Cells.Find(対象者)
If obj Is Nothing Then
MsgBox 対象者 & " 実績がありません"
Sheets("対象者名簿").Select
Else
Call 項目クリア
Call 編集(r)
For cnt = 1 To 31
If obj.Offset(0, cnt) = "" Then
Else
Worksheets("実績報告書").Range("l12").Offset(0, cnt) = 1 '実績報告書の利用日を編集
Worksheets("実績報告書").Range("l14").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l16").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l18").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l20").Offset(0, cnt) = 1
End If
Next cnt
Worksheets("実績報告書").Select
ActiveWindow.SelectedSheets.PrintPreview
Sheets("対象者名簿").Select
End If
Application.ScreenUpdating = True
End Sub
それでは、テストをしてみましょう。
花子さんをダブルクリックします。

見事、プレビューで表示されました。

印刷したい時は印刷ボタンを選択し、終了したい時は「プレビュー閉じる」を選択します。
選択した後は自動的に対象者名簿へ戻るはずです。
かなりイメージどおり出来上がってきました。
次回は、一気に印刷する処理を考えてみたいと思います。
これができれば85%完成です。
では
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善について書いています。
3日の仕事がわずか5分に!夢のような取り組みです。
今日は、印刷処理について考えてみます。
一件の印刷なら、いたって簡単。
印刷プレビューの手順をマクロの記録で作成します。
①実績報告書のシートを選択
②マクロの記録開始
③印刷プレビュー
④印刷ブレビューを閉じる
⑤対象者名簿を選択
⑥マクロの記録終了
の手順で記録してみましょう。
①、② 実績報告書のシートからマクロの記録を開始します。

③ 印刷プレビューを表示させます

④ 印刷プレビューを閉じます。

⑤対象者名簿を選択し、⑥マクロを終了します。

下のようにマクロが記録されたはずです。
Sub Macro1()
'
' Macro1 Macro
'
ActiveWindow.SelectedSheets.PrintPreview
Sheets("対象者名簿").Select
End Sub
赤色の部分を、先日迄作ったプログラムにコピーします。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
Dim obj As Object
r = Target.Row
対象者 = Sheets("対象者名簿").Range("d" & r)
Set obj = Workbooks("実績.xlsx").Worksheets("実績データ").Cells.Find(対象者)
If obj Is Nothing Then
MsgBox 対象者 & " 実績がありません"
Sheets("対象者名簿").Select
Else
Call 項目クリア
Call 編集(r)
For cnt = 1 To 31
If obj.Offset(0, cnt) = "" Then
Else
Worksheets("実績報告書").Range("l12").Offset(0, cnt) = 1 '実績報告書の利用日を編集
Worksheets("実績報告書").Range("l14").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l16").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l18").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l20").Offset(0, cnt) = 1
End If
Next cnt
Worksheets("実績報告書").Select
ActiveWindow.SelectedSheets.PrintPreview
Sheets("対象者名簿").Select
End If
Application.ScreenUpdating = True
End Sub
それでは、テストをしてみましょう。
花子さんをダブルクリックします。

見事、プレビューで表示されました。

印刷したい時は印刷ボタンを選択し、終了したい時は「プレビュー閉じる」を選択します。
選択した後は自動的に対象者名簿へ戻るはずです。
かなりイメージどおり出来上がってきました。
次回は、一気に印刷する処理を考えてみたいと思います。
これができれば85%完成です。
では

Posted by ミール at 08:05│Comments(0)
│VBA