質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

3005閲覧

Access レポート上のテキストボックス中のエラー処理と同内容の処理をVBAで行いたい

mnbwqz

総合スコア74

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2021/11/18 02:16

編集2021/11/18 08:54

レポート上に各商品(商品A~商品C)の販売日数を表示するためのテキストボックスがあります。各テキストボックスにはコントロールソースとして次のように設定しています。サブレポートのテキストボックス「販売日数」を設定し、販売実績のない商品Cの場合のエラー処理も加える。
=IIf(IsError([サブレポート]![販売日数]),0,[サブレポート]![販売日数])

レポート

商品販売日販売日数
商品A1/53
1/7
1/9
商品B1/52
1/6
商品C0

サブレポート
※サブレポートの商品ヘッダー中に、各商品ごとの販売日数を集計するテキストボックス「販売日数」を配置しています。

商品販売日個数
商品A1/51
商品A1/72
商品A1/94
商品B1/51
商品B1/61

一方、VBAで、サブレポートのテキストボックス「販売日数」を参照して各商品の販売日数を取得しようとする場合に、商品Cの場合のエラーを処理するため、下記のコードを書いても、「実行時エラー'2427'指定した式には値がありません。」が表示されます。どのように変更すればエラーを処理できますでしょうか。「[サブレポート]![販売日数].value」としても同じでした。よろしくお願いします。

VBA

1Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) 2 3(罫線を引く処理) 4 5If IsError([サブレポート]![販売日数]) Or Isnull([サブレポート]![販売日数]) Or IsEmpty([サブレポート]![販売日数]) Then 6 Debug.Print 0 7Else 8 Debug.Print [サブレポート]![販売日数] 9End If 10 11End Sub

(追記)ご回答ありがとうございます。コードは、メインレポートの詳細セクションのフォーマット時に記述しています。VBAで取得して、メインレポートの商品ごとの縦罫線の長さの計算(各商品の販売日数に応じて変わる)に利用したいと思っています。

(追記)
ご回答ありがとうございます。
エラートラップのご説明参考になります!
Errオブジェクトというものを利用すればよいのですね!

>あるいは、サブレポートの高さに合わせたいなら、Me.[サブレポート].Height で取得できます(印刷時イベントでないとダメだったかも)。

仰る通り、フォーマット時イベントでは拡大が反映されずデザインビューで配置した時のままの大きさが返されました。印刷時イベントでは拡大が反映され数値が変化しました。VBAでの罫線の描画処理も印刷時イベントでするように変更しました。[サブレポート]![販売日数]の取得からの一連の処理が減るので助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2021/11/18 03:48

提示のVBAコードはどこのどのイベントに記述していますか。 メインレポートの詳細セクションのフォーマット時でしょうか。 できれば、Private Sub から End Sub までコピーして追記してもらえますか。
hatena19

2021/11/18 04:37

また、VBAで取得してからそれをどうしたいのでしょうか。レポートでのVBA処理はイベントの発生メカニズムを理解していないと一筋縄ではいきまんせんよ。
guest

回答1

0

ベストアンサー

とりあえず現状のエラーを無視するだけなら、エラートラップすればいいかも。

vba

1On Error Resume Next 2Dim res 3res = Me.[サブレポート]![販売日数].Value 4If err <> 0 Then 5 Debug.Print 0 6Else 7 Debug.Print res 8End If

ただ、レポートをVBAで制御すのは簡単ではないですよ。
何をしたいのかを提示した方がいいアイデアを提供できるように思います。

質問の追記への回答

縦罫線を詳細セクション全体に引きたいなら、高さは想定される最大高を設定しておけばいいので、計算する必要はないです。

あるいは、サブレポートの高さに合わせたいなら、Me.[サブレポート].Height で取得できます(印刷時イベントでないとダメだったかも)。

また、テキストボックスではエラー無く表示されているなら、テキストボックスの値を参照するという方法もあります。

投稿2021/11/18 04:54

編集2021/11/18 08:12
hatena19

総合スコア33795

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mnbwqz

2021/11/24 11:03 編集

丁寧なご回答ありがとうございました。 最大高を利用して線を引くことができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問