• 締切済み

ACCESSレポートで頁フォーマット時にVBコードで頁の余白を指定するには?

ACCESSレポートで頁ごとに、余白の設定をしたいので、 メニューの[ファイル]-->[余白]で余白を設定するのではなく、 頁フォーマット時にVBコードで頁の余白を指定したくて 以下のようなコードを書いてみたのですが、うまくできません。 Private Sub Report_Page()  Msgbpox Me.Left End Sub とレポート内のモジュールに書くと、左余白のインチが表示されたので、 Private Sub Report_Page()  Me.Left = 567 * 3 End Sub と入力しましたが、 「このプロパティは読みとり専用であるため。。。」 というエラーが表示されてしまいました。 何か良い方法を教えて下さい。

みんなの回答

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.4

Accessの場合、ページごとに動的に余白を設定する機能はありません。 ですから、「ページごとにすべてのコントロールを移動させる」ことによって対処します。 すべてのコントロールを右に100twips 移動させるには、 Dim CTL as Control For Each CTL In Me.Controls CTL.Left=CTL.Left + 100 Next CTL ってなコードを適当なFormatイベントの中に書いてやります。 実際にコーディングするなら、Open時にコントロールの初期位置を配列に読み込んでおいて、それに加減算するって形が扱いやすいかな… 尚、静的に余白を設定するんであれば(既に回答があるように)PrtMipプロパティを使うといいです。 application.echo false docmd.OpenReport "Report_Name",acViewDesign '-適当にPrtMipを設定- docmd.close acreport,"Report_Name",acSaveYes application.echo true こんな感じ。

noname#3357
質問者

補足

回答ありがとうございました。 なるほど。 さっそく、やってみますね。 助かりました。_(._.)_

  • maro
  • ベストアンサー率47% (95/199)
回答No.3

何万件ものレコードをそのまま印刷するのですね?それじゃあExcelに吐き出すのは無理ですね。Excelは最大3万行ちょっとですからね。 OLEでExcel上にデータを書き込むのは結構遅いみたいです。ExcelのオブジェクトのVisibleをTrueにしてみると、書き込んでいく様子が見えますから(^^;)。 データの抽出に時間がかかるということならSQL Serverに置き換えたらいかがでしょう?Access2000ならSQL Server互換のMSDEが使えますし。MSDEならWindowsNTでなくてもWindows95/98で動作しますし、サーバーとクライアントを同じマシンで運用できます。(というか、MSDEをインストールしたマシンでAccessを動かすということですね)Access97から別のマシンにインストールしたMSDEにアクセスすることも可能です。 12万件程度のレコードがあるテーブルからレコードを抽出するのにMDBファイルならかなり時間がかかるのにSQL Server(MSDE)ならあっという間にすんでしまいます。 見当違いな答えでしたらごめんなさい。

noname#3357
質問者

補足

SQL Server互換のMSDEですか。勉強してみます。 たくさんのアドバイスありがとうございました。

  • maro
  • ベストアンサー率47% (95/199)
回答No.2

補足を拝見しました。 すみません。こちらもAccessのヘルプを「余白」で検索したら「PrtMipプロパティ」というのがあったので、検証もせずにそのまま答えを送信してしまいました。 「参照のみ可能」ということは、ページフォーマット時に余白の値は参照できるけど、設定はできないということなので、できないのかもしれません。 一つのページごとに別々のレポートに出力するとか?そういうのはだめでしょうか? 基本的に私はAccessのレポートは融通が利かないので嫌いです(^^;)。 反則技になりますが、Wordではページごとに印刷設定ができますから、OLEでWordに値を出力して印刷させてはいかがでしょう?(差し込み印刷になりますか?) ちなみに私の場合ですが、帳票類を印刷するときにはExcelに値をOLEで貼り付けて印刷しています。その方が印刷に関してはかなり融通が利きます。ついでに複雑な計算類もExcel上でやらせています。Accessでは抽出した値をExcelに貼り付けるだけですみますので。

noname#3357
質問者

補足

maroさん、助言、ありがとうございます。 おっしゃる通りで、excelの方が融通が利きますよね。 私もword、excel等での出力も考えたのですが、 今現在、約60000レコードでカラム数も多く、 将来的には、7万、8万レコードになることも考慮すると、 excel97では、1シート内に収まらないし、 wordに7万、8万レコードを排出するのは無理がある。(と勝手に決めつけました。) それで、Accessのレポートで、出来るといいな と思ったのですが、安易ですね。(^^;) ページごとに別々のレポートに出力する方法をとろうか 思います。 ありがとうございました。m(_ _)m ところで、OLEの話がありましたので、 OLEのことで質問してもよろしいですか? 処理レコード数は4万程度なんですが、 OLEを使って、ACCESSデータをEXCELにデータを書き込むと、 処理速度がとっても遅いのです。 今は、ACCESSデータをテキストにし、EXCELのVBAでそのテキストを読み込んで、 書き込むという、いわば回り道みたいな方法をとっているのですが、 (ACCESSデータをテキストする時間をあわせてもこちらの方が私には処理速度が速く感じるので) OLEを使ったコーディングが悪いのでしょうか? 勉強不足ですみませんが、教えていただけないでしょうか。

  • maro
  • ベストアンサー率47% (95/199)
回答No.1

PrtMipプロパティというのがあります。それを使うとできそうです。 AccessのHELPをみてください。

参考URL:
Accessのヘルプ
noname#3357
質問者

補足

回答ありがとうございます。 さっそく、PrtMip プロパティのヘルプを見てました。が、 「デザイン ビューでは変更が可能ですが、その他のビューでは参照のみ可能です。」と書いてあり、 実際に使用例を利用してコードを書いてみて、プレビューすると、 エラーがでてしまいます。 このプロパティを理解できてないからかもしれません。 プレビュー時に、データの内容によって、余白を変更したいのですが、 無理なのでしょうか?

関連するQ&A