営業所マスタリストの作成、3回目です。
では、はじめましょう。
今回は、レポートのレイアウトから説明します。
デザインビューでレポートを作成してください。
レポートヘッダーは使用しません。
-------------------------------------------------------------------
前回は、レポートのレイアウトの作成をしました。
今回は、フォーム上でのVBAを解説します。
1.印刷ボタンについて
1-2.btn印刷_Click()
If intinsatu = 1 Then
If MsgBox("印刷を開始しますか", (vbYesNo + vbDefaultButton2 + _
vbInformation), "印刷") = vbYes Then
Else
[印刷順].SetFocus
Exit Sub
End If
End If
intRet = 印刷処理(2)
印刷をするのかMsgBoxで確認させます。
”はい”を押すと印刷処理(2)を処理させます。
1-3.MsgBoxについて
MsgBox関数
メッセージボックスを表示しユーザーの応答を待ちます。
MsgBox(メッセージ,ボタンとアイコン,タイトル)
メッセージ:表示するメッセージ
ボタンとアイコン:ボタンとアイコンを指示
タイトル:タイトルバーの文字列
分類 値 記号 内容
ボタン 0 vbOKOnly [OK]ボタンだけ
の指定 1 vbOKCancel [OK]と[キャンセル]ボタン
2 vbAbortRetrylgnore [中止]、[再試行]、
[無視]ボタン
3 vbYesNoCancel [はい]、[いいえ]、
[キャンセル]ボタン
4 vbYesNo [はい]、[いいえ]ボタン
5 vbRetryCancel [再試行]、[キャンセル]ボタン
-*-------*-------*-------*-------*-------*-------*-------*-------*-
2.印刷処理()について
Functionで印刷処理を作成して下さい。
Function 印刷処理(insatu_sentaku As Integer) As Integer
'◎ポイント解説 1 -----*-----*-----*-----
'insatu_sentaku(1:プレビュー、2:印刷)
If 印刷順.Value = 1 Then
'カナ名順(1)
Forms(cFormName_M)![sta営業所コード] = 0
Forms(cFormName_M)![end営業所コード] = 99
If IsNull(Forms(cFormName_M)![staカナ名]) Or _
Trim(Forms(cFormName_M)![staカナ名]) & "" = "" Then
Forms(cFormName_M)![staカナ名] = " "
End If
If IsNull(Forms(cFormName_M)![endカナ名]) Or _
Trim(Forms(cFormName_M)![endカナ名]) & "" = "" Then
Forms(cFormName_M)![endカナ名] = _
"ンンンンンンンン"
Else
Forms(cFormName_M)![endカナ名] = _
Forms(cFormName_M)![endカナ名] & _
"ンンンンンンンン"
Forms(cFormName_M)![endカナ名] = _
Left$(Forms(cFormName_M)![endカナ名], 40)
End If
t_RecordSource = "rp_sp_営業所マスタリスト_カナ順"
Else
'得意先コード順(2)
Forms(cFormName_M)![staカナ名] = " "
Forms(cFormName_M)![endカナ名] = _
"ンンンンンンンン"
Forms(cFormName_M)![sta営業所コード] = _
Format$([sta営業所コード], "00")
Forms(cFormName_M)![end営業所コード] = _
Format$([end営業所コード], "00")
t_RecordSource = "rp_sp_営業所マスタリスト_コード順"
End If
On Error GoTo Err_印刷処理
Dim stDocName As String
stDocName = "r_営業所マスタリスト"
If insatu_sentaku = 1 Then
'プレビュー
'◎ポイント解説 2 -----*-----*-----*-----
DoCmd.OpenReport stDocName, acPreview
DoCmd.RunCommand 245
Else
'印刷の処理
'◎ポイント解説 3 -----*-----*-----*-----
Call prtReport(stDocName, cnsA4, cns横, 2)
End If
Forms(cFormName_M)![印刷順].SetFocus
Exit_印刷処理:
Exit Function
Err_印刷処理:
'◎ポイント解説 4 -----*-----*-----*-----
If Err = 2501 Then
DoCmd.Close acReport, stDocName, acSaveNo
Application.Echo True
Else
MsgBox "エラーナンバー " & Err.Number & _
vbCrLf & _
Err.Description, vbCritical, "エラー"
End If
Resume Exit_印刷処理
注意:"ンンンンンンンン"は、半角になります。
メルマガは半角の記述にすると文字化けします。
そんな理由で全角にしています。
では、解説です。
2-1.◎ポイント解説 1 について
insatu_sentakuが1ならプレビューを表示させます。
insatu_sentakuが2なら印刷をさせます。
rp_sp_営業所マスタリスト_カナ順のストアドはどう渡すのか?
記述されていませんよね。
レポートの左上にある黒■(レポートヘッダーの左上)を右クリック
レポートのデータタグに入力パラメータがあります。
そこに以下の命令を入れます。つないで一文で入れてください。
2-2.◎ポイント解説 3 について
印刷の処理になります。
印刷では、さまざまな問題が発生します。
プリンターが変わったらレポートを修正したということありませんか?
プリンターが違ったら、印刷がおかしくなった
そんな時、モジュールを作っておくと便利なんです。
用紙は何?、印刷の向きは?これを設定して印刷させます。
Call prtReport(stDocName, cnsA4, cns横, 2)
これは、何度も解説しましたので今回はモジュールを省略します。
今回は、"rp_sp_営業所マスタリスト_カナ順"でA4用紙で横向きに
印刷させます。
"2"のいみですが、印刷時モードのときプレビューを表示させない
処理です。
なんと丁寧に印刷をするとプレビューも描画してくれるのです。
だって、印刷しているのにプレビューを描画させても意味がない。
なので、表示させないようにしてます。
2-3.◎ポイント解説 2 について
プレビューの処理です。
1がプレビューで表示、2がプレビューなしで印刷をします。
2-4.ポイント解説 4 について
Err=2501は印刷データなしのエラーステータスです。
印刷でメッセージが出たあとに再度Accessのエラーが
出るための制御をしてます。
印刷時にデータがない場合デザインビューになります。
それを防ぐための処理が
DoCmd.Close acReport, stDocName, acSaveNo
画面が戻ってこないためにする処理です。
Application.Echo True
3.プレビューボタンについて
1-2.btnプレビュー_Click()
If intpurebyu = 1 Then 'プレビュー確認(有り)
If MsgBox("プレビューを開始しますか", (vbYesNo + vbDefaultButton2
_
+ vbInformation), "プレビュー") = vbYes Then
Else
[印刷順].SetFocus
Exit Sub
End If
End If
intRet = 印刷処理(1)
プレビューボタンの処理は印刷処理とほとんど同じです。
印刷処理(1)になり、MsgBoxのメッセージが違うくらいです。
3.rp_sp_営業所マスタリスト_カナ順について
ALTER Procedure rp_sp_営業所マスタリスト_カナ順
(
@sta営業所コード int,
@end営業所コード int,
@staカナ名 varchar (40),
@endカナ名 varchar (40)
)
As
SELECT 営業所マスタ.*
FROM 営業所マスタ
where (営業所マスタ.営業所コード >= @sta営業所コード ) and
(営業所マスタ.営業所コード <= @end営業所コード ) and
(営業所マスタ.カナ名 >= @staカナ名 ) and
(営業所マスタ.カナ名 <= @endカナ名 )
order by 営業所マスタ.カナ名,営業所マスタ.営業所コード
return
では、”rp_sp_営業所マスタリスト_コード順”のストアドは
どうすれば・・・?
考えてみてください。
みなさんなら簡単にできるはずです。
次回も営業所マスタリストの作成です。
===================================================================
◆
実践テクニック、Accessで作るクラサバシステム ◆
編集・構成:高橋浩
提供・発行:ティウェア
http://www.1tware.com/index.html
Access2000+MSDE2000、Access2002+MSDE2000、Access2003+MSDE2000で
作る販売管理ソフト、クライアントサーバーシステムを構築
※当メールマガジンに掲載された記事を許可なく転載することを禁じます。
===================================================================
実践テクニック、Accessで作るクラサバシステム(隔週 火曜日発行中)
SEが10年以上の開発ノウハウを惜しみなく完全公開!
|