<Access レポート Me.NextRecord = Falseで移動を止める>
こんにちは、三流プログラマーKen3です。 今回は、 Access レポートで、 Me.NextRecord = False を使用して、レコードの移動を止めて見たいと思います。 メルマガの中身はふざけてる言葉が多いけど、 サンプルは真剣に作ったので、 http://www.ken3.org/vba/lzh/vba076.lzh にtest076.mdb(Access97版)が保存されています。 テストで使ってみてください。/* * 1.今回のキッカケ */
No.74 Access 列型レポートの左端に印刷したい http://www.ken3.org/backno/backno_vba15.html#74 で、内容は、 --- > アクセスで列型のレポートを作りたいのですが、困っていることが > あります。列型のレポートそのものは作れるのですが、ラベルがうまく > いきません。 > 作りたいのは縦4列のデータを出力し、左端にラベルをつけるとい > うものです。 > 詳細にラベルを置くと繰り返し出力してしまいます。結局解らなく > て、現在はラベルと罫線と、データを分けて二重に出力するという面倒 > な方法をとっています。 > 何か解決方法はないものでしょうか? ---- 列型のレポート、外枠に何か書きたい、、のかぁ、、 上下はページのヘッダー、フッターがあるけど、 左右はそれらしいの無いしなぁ。今回使いたいのは左側に何か書きたいときかぁ。 で、余白に無理やり書いて、IIfでかわしてみる方法を書いたんだけど、 やはり、印刷部分が長くて、かわせなかったみたい、う〜ん。。。 の続きです。/* * 2.アプローチの方法を変える */
さてと、余白から攻めてみても、あの子は落とせなかったかぁ。 次のアプローチ方法を考えないとなぁ。 できたら手をかけないで、女の子落としたいよね(目的を達成したいよね) みんながやってない斬新な方法がいいけど、なかなか思いつかない。 ※くだらない恋愛テクニックはネットに転がっているけど、 自分に合うテクニックが無いんだよなぁ。。。じゃなくってVBAテクね。 なんて書いてると、女性読者とマジメ君が解除ボタンを押すので、 路線を戻してと、(あまり戻ってなく、いつもの三流的な文章だけど) 昔のメルマガ印刷系のサンプルで、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Me.NextRecord = False で、レコードを進ませないで、印刷データの複製を作ったなぁ。 ※元ネタは有名な、マイクロソフトサポート技術情報の 最後まで罫線を引くで覚えたMe.NextRecord = Falseだけど。 次の構想、 ^^^^^^^^^^ [1111111111] [2222222222] [3333333333] [4444444444] [5555555555] [6666666666] と続く印刷を Me.NextRecord = False を使用して、 [1111111111] [1111111111] [2222222222] [3333333333] [4444444444] [4444444444] [5555555555] [6666666666] として、左側の重複データの時、可視のON/OFFでラベル的データを表示する。 そんな戦略で作ってみたいと思います。 ※なんだ、昔の女に使った技を応用するのか? まだ言ってるよ(スミマセン、独り言多くって(笑)) 下準備、仕込みで、わかり易くするために 作成したコントロールのcntA(カウンタ)を見えるようにしてと、 (Mod 3) 3で割って余りが1の時はデータを進ませるのを止めるか。
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If (Me![cntA] Mod 3) = 1 Then '右端なら
Me.NextRecord = False 'レコードの移動を止める
End If
End Sub |
Private Sub ページヘッダー_Format(Cancel As Integer, FormatCount As Integer)
pFLG = False '印刷してないに設定する
End Sub |
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If (Me![cntA] Mod 3) = 1 Then '左端なら
If pFLG = False Then 'まだラベルエリアを印刷してなかったら
Me.NextRecord = False 'レコードの移動をまず止める
pFLG = True '印刷フラグを立てる
'ここにラベルのOn/Off処理を入れる
End If
Else
pFLG = False 'その他の時
End If
End Sub |
↑プレビュー結果
おいおい、
2重に印刷してどうするの?
~~~~~~~~~~~~~~~~~~~~~~~~~~
質問は、左端にラベルを印刷したいだろ?
まぁまぁ、あわてないでよ。
次に印刷したいラベルデータと実データの切り替えを行います。
また、=IIF使うんだろ?
それだと、芸が無いし、大変なので、
有名なプロパティ、.Visible = True/Falseを使用します。
まず、ラベルに印刷したい固定文字をレポートに貼ります
lab01,lab02とコントロール名を付けます。
可視は、Falseにしておきます
↑ラベルの配置(中身見て笑わないでね)
印刷する各コントロールに対して、
.Visible = True/Falseを使用して、印刷する/しないを切り替えます。
Private pFLG As Boolean '印刷制御フラグ
Private Sub ページヘッダー_Format(Cancel As Integer, FormatCount As Integer)
pFLG = False '印刷してないに設定する
End Sub |
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If (Me![cntA] Mod 3) = 1 Then '左端なら
If pFLG = False Then 'まだラベルエリアを印刷してなかったら
Me.NextRecord = False 'レコードの移動をまず止める
pFLG = True '印刷フラグを立てる
'ここにラベルのOn/Off処理を入れる
Me![lab01].Visible = True
Me![lab02].Visible = True
'実データをOff
Me![ID].Visible = False
Me![WrietTime].Visible = False
Me![F_TITLE].Visible = False
Me![F_MEMO].Visible = False
Else
'ここにラベルのOn/Off処理を入れる
Me![lab01].Visible = False
Me![lab02].Visible = False
'実データをOff
Me![ID].Visible = True
Me![WrietTime].Visible = True
Me![F_TITLE].Visible = True
Me![F_MEMO].Visible = True
End If
Else
pFLG = False 'その他の時
End If
End Sub |
↑左側にラベルを無事?に表示できました。
|
あとは、項目別にMSでお勉強かな? ◆ マイクロソフト サイトの歩き方 ◇ How-To インデックス ◇ FAQ インデックス ◇ スキルレベル別おすすめコンテンツ ◇ テクノロジ マップ ◇ テーマ別技術資料一覧 |
| ※種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。 お奨め本の目次を見るだけでも勉強になったり |