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

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

ただいまの
回答率

90.34%

  • VBA

    1909questions

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

  • Access

    474questions

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

レポートを開くためのクエリパラメータの参照の仕方が分かりません

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 603

infini55

score 2

 前提・実現したいこと

Accessのレポートを開く際にクエリのパラメータ(Between)を使ってレコードを抽出しています。 どんなパラメータが指定されたかでヘッダ部分とフッター部分のコントロールの表示・非表示をVBAで指定したいのですが、パラメータの値を参照する方法が分かりません。 また、どのイベント発生時に書けばよいのかも分かりません。

 該当のソースコード

Private Sub Report_Activate()

Dim RS1 As Recordset
Set RS1 = Me.RecordSource

        RS1.MoveFirst
        RS1.FindFirst "[Grupo] Like '*09'"
            If Not RS.NoMatch Then
             Me.[titlePA].Visible = True 'ヘッダのコントロールです
             Me.[E1-7].Visible = False 'フッターのコントロールです
            End If
      RS1.Close: Set RS1 = Nothing

End Sub

 試したこと

コントロールは両方ともプロパティでVisibleになっています。
クエリの[Grupo]のパラメータで、例えば101から109を選択するとグループ名が101、102… 109のレコードまで出て来ます。 パラメータは必ず入力するので Do Until EOFやLoopは省きました。
Report_Open、Report_Load、Report_Activateで試してみましたが、いずれも同じエラーが出てきます。

ちなみにエラーは(外国語なのでどう説明すればいいかよく分かりませんが)恐らく「このイベントでは実行できない」というようなことを言っているのだと思います。 表示・非表示が思い通りにならない以外は要求したレコードが抽出されています。

手探りで独学中なのでどのイベントが発生する際のプロシージャとすればいいのかも分からず、質問も不明瞭かも知れませんがお許しください。 よろしくお願い致します。

 補足情報(FW/ツールのバージョンなど)

Microsoft Office Professional Plus 2013 を使っています。
またOSは外国語版ですが、Unicodeではないプログラムに使用するのは日本語になっています。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sazi

    2018/06/10 11:46

    エラーメッセージが英語であってもそのまま質問に記述してください。

    キャンセル

  • sazi

    2018/06/10 11:48

    パラメータはパラメータ定義ですか?実際にパラメータを与えている部分の情報も追記して下さい

    キャンセル

  • infini55

    2018/06/10 16:19

    投稿の不備のご指摘ありがとうございました。 エラーメッセージが実はスペイン語なので、貼り付けても良いのかどうか分からず省略させていただいた次第です。やはり記述した方が良いでしょうか。  またパラメータはレポートのクエリのデザインビューでGrupoフィールドの抽出条件に Between [desde] And [hasta] と記述しています。

    キャンセル

  • sazi

    2018/06/10 17:04

    エラーコードなどもあるでしょうし、発生しているエラーの情報は取り敢えずは記述した方が良いかと思います。

    キャンセル

回答 1

0

『クエリのパラメータ(Between) ・・・ どんなパラメータが指定されたか』という説明とコードのRS1.FindFirst "[Grupo] Like '*09'"の整合性が疑問です。コードの条件は固定ですよね。(コードには他にもいろいろ間違いがありますが。)

とりあえずレコードソースのクエリのパラメータは、フィールドと同じ扱いになりますので、例えば、[値を入力してください] というようなパラメータを設定していたら、レポート上のテキストボックスのコントロールソースに、
=[値を入力してください]
というように設定すれば表示させることができます。

さらに表示/非表示なら、コントロールソースを

=IIf(表示する場合の条件式,"表示したいテキスト","")

と設定して「印刷時縮小」プロパティを「はい」に設定すると条件に合致しない場合は非表示になります。(印刷時縮小「はい」で "" のときは高さ0で非表示になる。)

実際のパラメータや条件が不明なので具体的な式は提示出ませんが、
上記のことを応用すれば希望の条件で表示/非表示を切り替えることができるはずです。

追記

とりあえず現状のコードをエラーなく動作するようにするには、下記のコードで。
ただし、これが質問者さんの希望する結果かどうかは分かりません。

Private Sub Report_Open()
    Dim RS1 As DAO.Recordset

    Set RS1 = CurrentDB.OpenRecordSet(Me.RecordSource)

    RS1.FindFirst "[Grupo] Like '*09'"
    If Not RS.NoMatch Then
             Me.[titlePA].Visible = True 'ヘッダのコントロールです
             Me.[E1-7].Visible = False 'フッターのコントロールです
    End If
  RS1.Close: Set RS1 = Nothing
End Sub

RecordSource はテーブル名またはクエリ名の文字列でRecordsetではありません。
このコードでは、『コントロールは両方ともプロパティでVisibleになっています。』とのことですので、[titlePA]は常に表示されます。

[Grupo] Like "*09" のレコードが存在するかどうかで表示/非表示を切り替えることをVBAを使わずに実現するには、下記のように設定します。
レポートヘッダーまたはれポートフッターにテキストボックスを配置します。
コントロールソースを下記のよう設定します。

=IIf(Sum([Grupo] Like "*09")=0,"表示したいテキスト","")

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/10 16:04

    ご回答ありがとうございました。間違いだらけでお恥ずかしい限りです。 取りあえずはパラメータがフィールド扱いになること、IIfで表示切替が出来るということをヒントに書き直してみます。 その結果をまた報告させていただきます。

    キャンセル

  • 2018/06/11 05:15

    修正コードまでご提示頂きありがとうございました。 やはり根本的なことが分かっていないため、頂いたヒントで色々試していたのですがどうもうまく行かずご報告できずにおりました。 頂いたコードでまた修正してみます。 取り急ぎお礼と現状のご報告まで。

    キャンセル

同じタグがついた質問を見る

  • VBA

    1909questions

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

  • Access

    474questions

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