Access VBA質問箱 IV

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

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


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

【12620】サブレポートのVBA ルクセンブルグ 14/10/10(金) 10:27 質問[未読]
【12622】Re:サブレポートのVBA かるびの 14/10/15(水) 22:36 回答[未読]
【12623】Re:サブレポートのVBA ルクセンブルグ 14/10/21(火) 14:13 質問[未読]
【12624】Re:サブレポートのVBA かるびの 14/10/21(火) 21:51 回答[未読]
【12625】Re:サブレポートのVBA ルクセンブルグ 14/10/24(金) 7:58 質問[未読]
【12626】Re:サブレポートのVBA かるびの 14/10/24(金) 23:28 回答[未読]
【12630】Re:サブレポートのVBA ルクセンブルグ 14/10/28(火) 14:26 お礼[未読]
【12627】Re:サブレポートのVBA かるびの 14/10/24(金) 23:59 回答[未読]

【12620】サブレポートのVBA
質問  ルクセンブルグ  - 14/10/10(金) 10:27 -

引用なし
パスワード
   こんにちは。

ACCESS2003を使い、メインレポートにサブレポートを組み込んでいるのでですが
サブレポートにあるVBAが動いてないみないなのですが
何かサブレポートのVBAを動かすコマンドのようなものがあるのでしょうか?
サブレポートにあるVBA自体は簡単な四則演算です。

何かご存知の方いらっしゃいましたら
教えて頂けたらと思います。
よろしくお願いします。

【12622】Re:サブレポートのVBA
回答  かるびの  - 14/10/15(水) 22:36 -

引用なし
パスワード
    当方もアクセス2003ですが、サンプルを作って実験してみました。
 メインレポート、サブレポートともに連結レポートとし、
サブレポートのReport_Openイベントに
    MsgBox "サブレポート Open"
というコードだけを書き、メインレポートを開いてみました。
 すると、「サブレポート Open」というメッセージが出ました。
 つまり、サブレポートのVBAはきちんと動いたということです。

>サブレポートにあるVBAが動いてないみないなのですが
 どんなVBAなんでしょうかね。
 当方のサンプルでは、Publicで宣言したサブレポートのサブルーチンを、
メインレポートから呼び出そうとしたところ
   「実行時エラー '2455':
   指定した式に、Form/Report プロパティに対する正しくない参照が含まれます。」
というエラーになりました。
 調べてみたところ、メインレポートからサブレポートのプロパティを操作したり、
サブレポートのプロシージャを呼び出したりするのがエラーになるのは、仕様のようです。

【12623】Re:サブレポートのVBA
質問  ルクセンブルグ  - 14/10/21(火) 14:13 -

引用なし
パスワード
   返信していただいてありがとうございます。
少しPC業務から離れていたので見ることが出来ませんでした。

サブレポート単体で試して
ご指摘いただいたようにMsgBoxを書いたところ
メッセージが表示されました。
四則演算の結果を代入しているテキストボックスがレポートヘッダーに
あるのですが、デバッグで追ってみたところ
代入は行っているのですがそのテキストボックスが表示されてないようでした。

1回目にレポートを印刷プレビューで開く→デザインビューにする → 印刷プレビューにすると計算結果の入ったテキストボックスが表示されました。

レポートヘッダーのテキストボックスは1回目では表示されないことがあるのでしょうか?

【12624】Re:サブレポートのVBA
回答  かるびの  - 14/10/21(火) 21:51 -

引用なし
パスワード
   >レポートヘッダーのテキストボックスは1回目では表示されないことがあるのでしょうか?
 レポートは、普段あまり使わないので、そんなには詳しくないですが、
レポートを開いたときに、レポートヘッダのテキストボックスが表示されないということは、
VBAで当該テキストボックスのVisibleプロパティを操作していない限り、
ないはずだと思います。

>四則演算の結果を代入しているテキストボックスがレポートヘッダーに
>あるのですが、
 当方もアクセスは2003ですが、
Report_OpenイベントでテキストボックスのValueプロパティに値を設定しようとしたところ、
「実行時エラー 2448 
このオブジェクトに値を代入することはできません。」
とのエラーになり、レポートを開けませんでした。
 テキストボックスを配置先を、レポートヘッダ、ページヘッダ、詳細と変え、
また、テキストボックスを非連結にしたり、連結にしたりしてみましたが、
いずれでも上記エラーとなり、レポートを開けませんでした。
 なので、テキストボックスに四則演算の結果を代入できたということについて、
本当に代入できたのだろうかと思っています。

【12625】Re:サブレポートのVBA
質問  ルクセンブルグ  - 14/10/24(金) 7:58 -

引用なし
パスワード
   返信ありがとうございます。

私のレポートは
レポートヘッダー                 可視:はい
TextBox[SUM([フィールド])] TextBox[非連結]:名前(Tbox)
グループヘッダー                 可視:いいえ
詳細                       可視:いいえ
[フィールド] [フィールド2]
グループフッター                 可視:はい
TextBox[SUM([フィールド])]:名前(フィールドの合計) TextBox[SUM([フィールド2])]:名前(フィールドの合計2)
レポートフッター                 可視:いいえ

という構成になっています。
このレポートにVBAは

Private Sub レポートフッターセクション
 If フィールドの合計 <> 0 And フィールド2の合計 <> 0 Then
   Me.Tbox = Round((Me.フィールドの合計 / Me.フィールド2の合計) * 100, 4)
 Else
   Me.Tbox = "0.00"
 End If
End Sub

というコードなのですが、ブレークポイントで一つずつ
確認しながらコードを実行したところTboxには代入されていました。

おかしなところがあればご指摘願います。
よろしくお願いします。

【12626】Re:サブレポートのVBA
回答  かるびの  - 14/10/24(金) 23:28 -

引用なし
パスワード
   >レポートヘッダー                 可視:はい
>TextBox[SUM([フィールド])] TextBox[非連結]:名前(Tbox)
>グループヘッダー                 可視:いいえ
>詳細                       可視:いいえ
>[フィールド] [フィールド2]
>グループフッター                 可視:はい
>TextBox[SUM([フィールド])]:名前(フィールドの合計) TextBox[SUM([フィールド2])]:名前(フィールドの合計2)
>レポートフッター                 可視:いいえ

>Private Sub レポートフッターセクション
> If フィールドの合計 <> 0 And フィールド2の合計 <> 0 Then
>   Me.Tbox = Round((Me.フィールドの合計 / Me.フィールド2の合計) * 100, 4)
> Else
>   Me.Tbox = "0.00"
> End If
>End Sub

 やっと出てきましたね。
 これで、そちらの状況の理解が進みました。

 上記のVBAのコードですが、コード自体には特に問題はないと思います。
 強いて挙げれば、テキストボックスの値がNullである場合に備えて、
テキストボックスの値を条件式や計算に使うときは、Nz関数をかませた方がいいと思います。
例えば、
    If Nz(フィールドの合計.Value,0) <> 0 _
    And Nz(フィールド2の合計.Value,0) <> 0 Then

 ところで、上記コードは、どのオブジェクトのどのイベントで実行させているのでしょうか。


 また、そのイベントのイベントプロシージャにエラー処理ルーチンは設けられていますか。
もし設けられているならば、そこにおいてどのような処理をしていますか。

 いずれかのイベントでTboxのVisibleプロパティやEnabledプロパティを操作していませんか。


 なお、こちらでもサンプルを作って、実験してみました。
 結果は、Tboxは、常に表示され、
Tboxには、「Round((Me.フィールドの合計 / Me.フィールド2の合計) * 100, 4)」
の値が表示されました。
 レポートヘッダーのテキストボックスが1回目では表示されないという状況は再現しませんでした。

【12627】Re:サブレポートのVBA
回答  かるびの  - 14/10/24(金) 23:59 -

引用なし
パスワード
    前回投稿後に気付いたのですが、

>Private Sub レポートフッターセクション
> If フィールドの合計 <> 0 And フィールド2の合計 <> 0 Then
>   Me.Tbox = Round((Me.フィールドの合計 / Me.フィールド2の合計) * 100, 4)
> Else
>   Me.Tbox = "0.00"
> End If
>End Sub

 レポートではMeは使えなかったと思います。
 Meではなく、「Reports!レポート名」とする必要があります。

【12630】Re:サブレポートのVBA
お礼  ルクセンブルグ  - 14/10/28(火) 14:26 -

引用なし
パスワード
   返信頂きありがとうございます。

ご指摘頂いたことを踏まえ
いろいろ試してみた結果、VBAのコードをレポートヘッダーに記述したところ
思ったとおりの結果になりました。

質問する前にもっと方法を試すべきでした。
ご回答頂きありがとうございました。

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