none
Access VBAから[ページ設定]を表示/キャンセルでエラー RRS feed

  • 質問

  • Access2016 レポートの用紙設定をデザインモードではなくVB実行中に設定し直しをしたくて、
    下記アドレスを参考にしています。
    https://www.moug.net/tech/acvba/0100027.html

    DoCmd.OpenReport "レポート名", acViewPreview
    DoCmd.RunCommand acCmdPageSetup

    [ページ設定]ダイアログボックスの[キャンセル]ボタンをクリックすると実行時エラーが発生します。
    これを回避するためには、「DoCmd.RunCommand acCmdPageSetup」の前に次のコードを記述します。
    [object.]RunCommand command

    と、ありましたが、
    「[object.]RunCommand command」がよくわかりません。
    現在、on error resume next を使っていますが、それでも変数がクリアされる状況です。
    どなたかご教授を・・・・・
    環境はwin10+Access2016です。

    2018年6月11日 7:40

すべての返信

  • これを回避するためには、「DoCmd.RunCommand acCmdPageSetup」の前に次のコードを記述します。
    [object.]RunCommand command

    おそらくですが、「次のコード」が抜けているか、もしくは誤植だと思われます。
    「次のコード」は、on error resume nextで良いと思います。

    変数がクリアされてしまうとありますが、どのような変数でしょうか? この変数問題が回避できれば解決ということですよね?
    もう少しこの変数について詳しい説明をお願いいたします。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2018年6月11日 8:47
    モデレータ
  • ご指導、ありがとうございます。

    大まかなコードです。

    Private Sub ページ設定_Click()

        DoCmd.OpenReport "レポート名", acViewPreview
        On Error GoTo g001:
        DoCmd.RunCommand acCmdPageSetup

        DoCmd.Close acReport, "レポート名"
        DoCmd.OpenReport "レポート名", acViewPreview

    g001:

    End Sub

    該当レポートは「開く」時に、レポートに配置したテキストボックスの位置/大きさを
    Reports."レポート名".Width/Reports."レポート名".Heightの大きさに比例させて、変更させています。
      ※レポートはラベル用紙です。

    acCmdPageSetupにて「OK」ボタンをクリックで、レポート名を開きなおしテキストボックスを再配置。
      ※Reports."レポート名".Repaintがないため。
    acCmdPageSetupにて「キャンセル」ボタンをクリックで、レポート名を開きなおしはしない。

    わかったこと。
    acCmdPageSetupにて「OK」ボタンした場合、
    DoCmd.Close acReport, "レポート名"でエラーをおこしている。何のメッセージもなく!

    見た目、Accessは正常なのですが、次に何らかのイベントを起こすと「エラー」
    宣言していた変数は全てクリアされている。
    試しにメッセージボックスを挿入
        DoCmd.RunCommand acCmdPageSetup
      MsgBox "ページ設定が変更されした。" _
              & vbNewLine & "「レポート名」を開きなおします。", vbInformation, "御案内"
        DoCmd.Close acReport, "レポート名"
    めでたし、めでたし。希望通りの動作。

    更にわからないこと。
    メッセージボックス挿入なしの場合
    エラー発生後、Access本体は閉じず、初期起動フォームから再起動。
    同じエラーは発生せず。

    原因は何でしょう?
    メッセージボックスの挿入は無駄ですよね。



    2018年6月11日 12:32
  • あっ!!
    やっぱり「エラー」発生です。メッセージボックス挿入ありでも。
    DoCmd.Close acReport, "レポート名"
    を、通ったところでエラーメッセージ無しで、エラってました。
    しかし、初期フォームで再起動(Accessは閉じらないで)後はエラーにならない。

    どなたか、ご教授ください。
    2018年6月11日 14:38
  • 連続、何度もすみません。
    元のaccdbファイルはエラー発生しません。
    コピペしたaccdbファイルでエラー発生です
    2018年6月11日 14:53
  • コピペしてから何か変更されたのでしょうか? また、もう一度コピペし、その直後は正しく動くのでしょうか?
    コピペ直後に正常に動けばそれで良いですし、正常に動かない場合はコピペではうまく動かないという切り分けができることになります。
    まずは、この切り分けた結果をお知らせ願います。

    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2018年6月12日 0:49
    モデレータ
  • >コピペしてから何か変更されたのでしょうか?
    全く変更加えてません。
    単純コピペ、ここのコードにくるとエラー。

    諦めました。
    DoCmd.RunCommand acCmdPageSetup
    MsgBox "ページ設定が変更されした。" _
              & vbNewLine & "反映させるには「レポート名」を開きなおしてください。", vbInformation, "御案内"
    exit sub
    以下は削除
    DoCmd.Close acReport, "レポート名"
    DoCmd.OpenReport "レポート名", acViewPreview

    手動により、Close/再OpenReportで問題なし。

    2018年6月12日 10:34