Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1548 / 2272 ツリー ←次へ | 前へ→

【6566】データがなくても罫線を引く・・・を引用したのですが・・・ koorin 05/10/21(金) 16:22 質問[未読]
【6570】Re:データがなくても罫線を引く・・・を引... 小僧 05/10/24(月) 9:39 発言[未読]
【6576】Re:データがなくても罫線を引く・・・を引... koorin 05/10/24(月) 23:54 質問[未読]
【6577】Re:データがなくても罫線を引く・・・を引... 小僧 05/10/25(火) 10:29 発言[未読]
【6598】Re:データがなくても罫線を引く・・・を引... koorin 05/10/25(火) 18:05 質問[未読]
【6603】Re:データがなくても罫線を引く・・・を引... 小僧 05/10/26(水) 9:38 発言[未読]
【6619】Re:データがなくても罫線を引く・・・を引... koorin 05/10/26(水) 19:28 お礼[未読]

【6566】データがなくても罫線を引く・・・を引用...
質問  koorin  - 05/10/21(金) 16:22 -

引用なし
パスワード
   たびたびすみません、また教えてください。
レポートで見積書を作成しており、印刷時にデータがなくても用紙のしたまで
罫線を引きたかったので、参考に出来るサイトがないかと探したところ
ニキータさんの「魔法使いの開発工房」にぴったりのVBAが載っていたので
早速自分で書いてみましたが、上手くいきませんでした。

ニキータさんの作った見積書レポートとデザインが違うせいだと思いますので
私の作ったレポートの構成を説明すると、
「Q_親注番」クエリ(フィールド名が"親注番"(グループ化)、"会社名"(グループ化)、"客担当者"(グループ化)、"見積担当者"(グループ化)、"注番選択"で見積書作成時に親注番(見積No.にする)を選択出来るように"注番選択"の抽出条件に[親注番は?]と入力してあります。)をレポートヘッダに配置し、
「Q_注番別コスト計」(フィールド名が"親注番"(グループ化)、"品番"(グループ化)、"品名"(グループ化)、"注文数量"(グループ化)、"単位"(グループ化)、"見積単価""(グループ化)、"見積金額""(グループ化))をサブレポートとして、詳細に入っています。
また詳細のサブレポートの内訳はレポートヘッダに"品番"〜"見積金額"のラベルと"見積金額合計"のテキストボックスがあり、詳細に"品番"〜"見積金額"のテキストボックスがあります。
また、2ページ目以降のヘッダにするため、ページヘッダに"品番"〜"見積金額"のラベルがあります。(ここだけニキータさんの例と一緒です)
あと、改ページは初めサブレポートの詳細に入れたらVBA実行時に改ページが見当たらないとエラーが出たので、レポートの詳細内に(サブレポート全体のボックスのすぐ下)に配置しました。
説明が長くなりましたが、以上の設定で書いたコードは次の通りです。

Option Compare Database
Dim AAA As Integer  '今何行目なのかをカウントするための変数
Dim BBB As Integer  '今回印刷する予定のレコード件数をいれておく変数

Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
AAA = 0
BBB = DCount("品番", "Q_注番別コスト計")
Me!改ページ30.Visible = False
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
AAA = AAA + 1
If AAA Mod 30 = 0 Then
  If AAA < BBB Then
    Me!改ページ30.Visible = True
    Me!Section(3).Visible = True
  ElseIf AAA = BBB Then
    Me!親注番.Visible = True
    Me!品番.Visible = True
    Me!品名.Visible = True
    Me!注文数量.Visible = True
    Me!単位.Visible = True
    Me!見積単価.Visible = True
    Me!見積金額.Visible = True
  Else
    Me!親注番.Visible = False
    Me!品番.Visible = False
    Me!品名.Visible = True
    Me!注文数量.Visible = False
    Me!単位.Visible = Falsee
    Me!見積単価.Visible = False
    Me!見積金額.Visible = False
  End If
  
Else
  Me!改ページ30.Visible = False
  Me!Section(3).Visible = False  ’1度目のエラー箇所
  If AAA < BBB Then
    Me.NextRecord = True
    Me!親注番.Visible = True
    Me!品番.Visible = True    ’2度目のエラー箇所
    Me!品名.Visible = True
    Me!注文数量.Visible = True
    Me!単位.Visible = True
    Me!見積単価.Visible = True
    Me!見積金額.Visible = True
  ElseIf AAA = BBB Then
    Me.NextRecord = False
    Me!親注番.Visible = True
    Me!品番.Visible = True
    Me!品名.Visible = True
    Me!注文数量.Visible = True
    Me!単位.Visible = True
    Me!見積単価.Visible = True
    Me!見積金額.Visible = True
  Else
    Me.NextRecord = False
    Me!親注番.Visible = False
    Me!品番.Visible = False
    Me!品名.Visible = True
    Me!注文数量.Visible = False
    Me!単位.Visible = Falsee
    Me!見積単価.Visible = False
    Me!見積金額.Visible = False
  End If
End If
End Sub

これで実際に実行すると、

実行時エラー'2465':
指定した式で参照されている'Section'フィールドが見つかりません。

となりました。
改ページしてページヘッダを表示する箇所はエラーが出てないのですが・・・

それでページヘッダの箇所を2箇所とも削除して実行してみたら、
今度は'品番'フィールドが見つからないとエラーが出てしまいました。

次にデザイン事態をニキータさんのように作り変えよう(サブレポートでなく
初めから2つのクエリをしてしてレポートを作る)とやってみたら、
2つのクエリは同じテーブルを基に作っているので出来ませんでした。

どうしたら解決出来るのか教えて下さい。よろしくお願いします。

【6570】Re:データがなくても罫線を引く・・・を引...
発言  小僧  - 05/10/24(月) 9:39 -

引用なし
パスワード
   ▼koorin さん:
おはようございます。

元ネタのリンクです。

http://www.mahoutsukaino.com/ac/ac2002/vba/vba12/v12.htm

レポートの作成が苦手なので的確なアドバイスができませんが…。


ご提示された内容を見ると、現在 koorin さんは最終形まで
一気に持っていこうとしているために混乱されている部分が
あるのではないか、と思います。

何故うまくいかないのかの原因を一つ一つ詰めて行ってみてはいかがでしょうか。


>注番選択"の抽出条件に[親注番は?]と入力してあります。

まずはこれを固定値に。

>詳細のサブレポートの内訳は

サブレポートを使わずに、1つのレポートであれば
思った通りの事が実現できるのか。

などなど、まずは簡素化して思い通りの動作になるようにレポートを作成して、
そこからサブレポート化してみたりパラメータクエリにしてみたりすると、
現在うまくいっていない原因が特定できると思われますがいかがでしょうか

【6576】Re:データがなくても罫線を引く・・・を引...
質問  koorin  - 05/10/24(月) 23:54 -

引用なし
パスワード
   ▼小僧 さん:
こんばんは。

なんとか出来ました!
見積書でエラーが出る前、サブフォームを使わず一つのクエリからレポート印刷
したときは、きちんと出来たので見積書でもサブフォームを使わないレポートに
するため、クエリを作り直してやってみたら出来ました。

ただ、また一つ別の問題が出てきましたので教えて下さい。
見積書詳細の最後の行の次の行に「以下余白」と表示させたいのです。

 ____________________________________________________
 | 品番 | 品名  | 数量 |単位| 見積単価 |  金額 | 
 |____________|_________|______|____|__________|_________|
 |aaaa  |パソコン | 1  | 台 | 200,000 | 200,000 |
 |__________|_________|______|____|__________|_________|
 |    |以下余白 |   |  |     |     |
 |_________|_________|______|____|__________|_________|
 |    |     |   |  |     |     |
 |________|_________|______|____|__________|_________|
 |    |     |   |  |     |     |
 |________|_________|______|____|__________|_________|

こんな感じです。
あっ、表示できるようになった罫線は下線ではなく、枠なので詳細のテキストボックスを四角で囲って作ってあります。
枠を表示出来るようにする前はサブフォームのレポートヘッダに「以下余白」の
文字を入力してあり、見積詳細のすぐ下に表示できたのですが、今回の設定で
それが出来なくなってしまいました。
今、詳細の品名のテキストボックスを四角で囲ってありますが、四角を削除し新たにテキストボックスで囲み、そのテキストボックスに
「見積詳細行+1行目に”以下余白”と表示、それ以外の行は空欄」というコントロールソースが付けられれないかなぁと思っているのですが・・・
それとも、このコントロールも罫線(枠)をつけるためのVBAに追加することが出来るのでしょうか?
よろしくお願いします。(新たな質問で投稿した方がよかったでしょうか?)

【6577】Re:データがなくても罫線を引く・・・を引...
発言  小僧  - 05/10/25(火) 10:29 -

引用なし
パスワード
   ▼koorin さん:
おはようございます。


>見積書詳細の最後の行の次の行に「以下余白」と表示させたいのです。

枠の問題がちょっと解決できないかもしれませんが、
ご参考になれば、という程度なのですが…。

品名のところに「以下余白」と書いたラベルを配置。
可視を「いいえ」とします。

Private Sub 詳細_Format


の最後の Else の部分に
  Me![以下余白ラベル].Visible = True

と記述。
これでレコードがない場合は最後まで「以下余白」が表示されます。

後はここに
Else を通るのが1回目だったら True
          2回目以降だったら False

というロジックを組んでみてはいかがでしょうか。

【6598】Re:データがなくても罫線を引く・・・を引...
質問  koorin  - 05/10/25(火) 18:05 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。

>Private Sub 詳細_Format
>…
>
>の最後の Else の部分に
>  Me![以下余白ラベル].Visible = True
>
>と記述。
>これでレコードがない場合は最後まで「以下余白」が表示されます。

教えていただいた通りにやってみたのですが、品名の入っているところにも以下余白の字が表示されてしまったので、(可視を「いいえ」にしましたが・・・)
最後のElse部分だけでなく、他の条件のところにも以下余白のラベルをFalseで記述することにより、回避でき思い通りになりました。
ありがとうございましたm(__)m

出来あがりのコードは次の通りです。(ラベル78が以下余白ラベルです)

Option Compare Database

Dim AAA As Integer
Dim BBB As Integer

Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)
AAA = 0
BBB = DCount("注番", "Q_見積書発行用")
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
AAA = AAA + 1

If AAA Mod 17 = 0 Then
  If AAA < BBB Then
    Me!改ページ30.Visible = True
    Me.Section(3).Visible = True
  ElseIf AAA = BBB Then
    Me!品番.Visible = True
    Me!品名.Visible = True
    Me!注文数量.Visible = True
    Me!単位.Visible = True
    Me!売上単価.Visible = True
    Me!テキスト72.Visible = True
    Me!ラベル78.Visible = False
  Else
    If AAA = BBB + 1 Then
      Me!品番.Visible = False
      Me!品名.Visible = False
      Me!注文数量.Visible = False
      Me!単位.Visible = False
      Me!売上単価.Visible = False
      Me!テキスト72.Visible = False
      Me!ラベル78.Visible = True
    Else
      Me!品番.Visible = False
      Me!品名.Visible = False
      Me!注文数量.Visible = False
      Me!単位.Visible = False
      Me!売上単価.Visible = False
      Me!テキスト72.Visible = False
      Me!ラベル78.Visible = False
    End If
  End If
  
Else
  Me!改ページ30.Visible = False
  Me.Section(3).Visible = False
  If AAA < BBB Then
    Me.NextRecord = True
    Me!品番.Visible = True
    Me!品名.Visible = True
    Me!注文数量.Visible = True
    Me!単位.Visible = True
    Me!売上単価.Visible = True
    Me!テキスト72.Visible = True
    Me!ラベル78.Visible = False
  ElseIf AAA = BBB Then
    Me.NextRecord = False
    Me!品番.Visible = True
    Me!品名.Visible = True
    Me!注文数量.Visible = True
    Me!単位.Visible = True
    Me!売上単価.Visible = True
    Me!テキスト72.Visible = True
    Me!ラベル78.Visible = False
  Else
    If AAA = BBB + 1 Then
      Me.NextRecord = False
      Me!品番.Visible = False
      Me!品名.Visible = False
      Me!注文数量.Visible = False
      Me!単位.Visible = False
      Me!売上単価.Visible = False
      Me!テキスト72.Visible = False
      Me!ラベル78.Visible = True
    Else
      Me.NextRecord = False
      Me!品番.Visible = False
      Me!品名.Visible = False
      Me!注文数量.Visible = False
      Me!単位.Visible = False
      Me!売上単価.Visible = False
      Me!テキスト72.Visible = False
      Me!ラベル78.Visible = False
    End If
  End If
End If
End Sub

それで・・・次々にすみませんが、あともうひとつだけ教えてください。
コードをご覧になってわかると思いますが、今見積詳細が17行になったら
改ページするように設定してありますが、見積書の2ページ以降はヘッダが無いので、見積詳細が25行になるまで罫線を引いて改ページしたいのです。
どんな条件を加えればよいのでしょうか?

よろしくお願いします。
(追伸:先日ご相談したVBAの本ですが、ニキータさんの本を店頭でみつけたので
購入しました。)

【6603】Re:データがなくても罫線を引く・・・を引...
発言  小僧  - 05/10/26(水) 9:38 -

引用なし
パスワード
   ▼koorin さん:
おはようございます。

>教えていただいた通りにやってみたのですが、

すみません。こちらの考慮不足だったようです。


>見積詳細が17行になったら改ページするように設定してありますが、
>見積書の2ページ以降はヘッダが無いので、
>見積詳細が25行になるまで罫線を引いて改ページしたい


koorin さんのご要望を言い換えますと、
17行
42行
67行



で改行されたい、という事ですよね?現在は

17 で割って余りが 0 なら改行

となっているロジックを少し変更すると道が開けてくるような気がしませんでしょうか。

【6619】Re:データがなくても罫線を引く・・・を引...
お礼  koorin  - 05/10/26(水) 19:28 -

引用なし
パスワード
   ▼小僧 さん:
小僧さんのヒントを元に無事、希望通りの見積書が出来上がりました(^o^)/
ありがとうございましたm(__)m

今までご質問して、作ってきたデータベースは会社から10月中に完成するように
言われていたものだったので、無事完成し、ホッとしています。

また自分ではどうしても分からなくなったらお世話になると思いますが
そのときはまたよろしくお願いします。

本当にありがとうございました。

1548 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free