• 締切済み
  • 暇なときにでも

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

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

noname#3357
noname#3357

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数1657
  • ありがとう数8

みんなの回答

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

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 こんな感じ。

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連するQ&A

  • Access フォームから並び替えレポート

    お知恵をお貸しください。 Access2010 フォームでオプショングループを2種類用意しました。 規則グループ 昇順 降順 並び替えグループ ID ふりがな レポートに Private Sub Report_Open(Cancel As Integer) Select Case Forms!フォーム4!fra並べ替え Case 1 Me.OrderBy = "ID ASC" Me.OrderByOn = True Case 2 Me.OrderBy = "ふりがな ASC" Me.OrderByOn = True End Select End Sub 並び替えでは、昇順のみうまくレポートを行えますが。 規則で ID ふりがな を昇順 降順 に行えません。 なにを加えればよいのでしょうか。 よろしくお願いします。

  • レポートを開く時にテキストボックスのフォントサイズと行間を指定する方法

    レポートを開く時にテキストボックスのフォントサイズと行間を指定する方法 アクセス初心者です。 レポートにテキストボックスを配置し,レポートオープン時にフォントサイズと行間を指定したにですが,下のように記述してもうまくいきません。 どなたか教えていただけないでしょうか。よろしくお願いします。 ******************************** Private Sub Report_Open(Cancel As Integer) Me.テキスト1.FontSize = 15 End Sub ********************************

  • Accessのメインレポートとサブレポート

    Accessでメインレポートとサブレポートがあるレポートを作っています。 メインレポートのページが変わるたびに、サブレポートのレコードソースを変更して、サブレポートの再表示をさせたいのですが、どうやればいいのでしょうか? ちなみにメインのほうで以下のように記述しましたが、 (3)でエラーになります。 (エラー内容:記述ミス、または開いていない) Private Sub Report_Page() (1) Dim strSQL As String (2) strSQL = "SELECT * FROM Meisai" _ & " WHERE DenNo = " _ & Format(Reports!r日報!DenNo.Value, "000000") (3) Reports!r明細!.RecordSource = strSQL End Sub

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

何万件ものレコードをそのまま印刷するのですね?それじゃあ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)ならあっという間にすんでしまいます。 見当違いな答えでしたらごめんなさい。

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

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を使ったコーディングが悪いのでしょうか? 勉強不足ですみませんが、教えていただけないでしょうか。

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

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

参考URL:
Accessのヘルプ

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連するQ&A

  • ACCESSでラベルの余白と高さ、幅を設定する

    ACCESS2007でラベル印刷を印刷をしようとしています。 ページ設定ができないランタイム環境でも使えるようにラベルの印字位置を設定するVBAを考えています。 フォームに設定値を入力する「上余白」、「左余白」、「ラベル幅」、「ラベル高さ」という非連結のテキストボックスを4個作りました。 ラベル印刷用にレポートを作成し、「レポートA」としています。 レポートAにはページ設定で、基本となるラベルのレイアウトなどを設定しています。 フォームに「適用」というボタンを配置し、クリック時のイベントに以下のようなコードを書き込みました。 Private Sub 適用_Click() DoCmd.OpenReport ("ラベルA"), acViewDesign, , , acHidden With Reports(ラベルA).Printer .DefaultSize = False .TopMargin = Me.上余白.Value .LeftMargin = Me.左余白.Value .ItemSizeWidth = Me.ラベル幅.Value .ItemSizeHeight = Me.ラベル高さ.Value End With DoCmd.Close acReport, ("ラベルA"), acSaveYes End Sub 動作させるとエラーは出ないのですが、設定値がちっとも反映されません。 何が間違っているのでしょうか?

  • Accessレポートで質問です

    VBA初心者です。レポート機能を使って履歴書を出力したいのですがうまく作れません。 内容は下記の通りです。 テーブルA(社員情報)<単票形式>:[社員コード]、[社員名] テーブルB(履歴情報)<表形式>:[社員コード]、[西暦]、[履歴内容] レポートA:テーブルAの全てのフィールドに連結 レポートB:レポートAのサブレポートとしてレポートA上に配置   フィールドは全てテーブルBに連結 <やりたい事> レポートAの[社員コード]とレポートB(サブ)の[社員コード]で連動させ、 レポートAの[社員コード]が変わると該当の履歴情報のみをレポートBに表示したい。 <現在の考え> テーブルAに連結したフォームA上に配置したあるコマンドボタンをクリックし 表示中の[社員コード]でレポートAとレポートB(サブ)にフィルターをかけて抽出する。 Private Sub コマンドボタン_Click() 処理A Reports("レポートA").Report.Filter = "社員コード = '" & Me!社員コード & "'" Reports("レポートA").Report.FilterOn = True  処理B Reports("レポートA").レポートB.Report.Filter = "社員コード = '" & Me!社員コード & "'" Reports("レポートA").レポートB.Report.FilterOn = True 結果  処理A--->抽出 ○ 処理B--->抽出 × その他レポートBに関しては上記処理Bを止め、「開く時」の処理として Private Sub Report_Open(Cancel As Integer) Me.Filter = "社員コード = '" & Parent("社員コード") & "'" Me.Report.FilterOn = True End Sub 「実行時エラー'2101'; プロパティの設定値として指定した値が正しくありません。」 と出て結果×でした。。 どなた様か解決案もしくは他に良い方法がありましたらご教授頂きたく宜しくお願い致します。

  • Access2003 レポートの合計の出し方

    お世話になっております。 Access2003のレポートで下記のようなコードで価格の合計を求めようとしています。 1ページですとこれで合計は表示されるのですが、レポートが2ページ以降になると最終ページの合計が表示されます。 最終ページの最後にすべての合計を出したいと思っています。 ご教授いただければ幸いです。よろしくお願いいたします。 Option Compare Database Dim a As Variant Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer) a = 0 End Sub Private Sub グループヘッダー3_Print(Cancel As Integer, PrintCount As Integer) a = a + Me.価格 End Sub Private Sub レポートフッター_Print(Cancel As Integer, PrintCount As Integer) Me.合計 = a End Sub

  • Accessのレポートについて

    Accessのレポートについて Access2002で作成した、あるシステムのレポートで、会社名と代表者名を印字するようにしています。 14文字ある氏名が13文字で改行されてしまいます。 15文字以上ある氏名は縮小されて、1行で枠内に収まって印字されます。 該当のレポートのプロパティを開き、イベントタブの「開く時」のイベントプロシジャを見ると下記のような表記があります。 下記の表記により、上記のようになるのではないかと推測していますが、素人な者で、下記を解読できずにおります。 どうか、下記について、ご教授いただけないでしょうか。 Option Compare Database '文字列の比較にデータベースで決められた形式を使用します。 Private Sub Report_Open(Cancel As Integer) End Sub Private Sub 詳細1_Format(Cancel As Integer, FormatCount As Integer) Call 氏名自動縮小(Me!氏名, 14, 9) End Sub

  • Accessのレポートで開くと「読み取り専用なので…」と出る。

    今まで通常通り表示できていたレポートを、詳細のところを白/グレーのストライプにしようと思い、以下のコードを追加しました。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Count = Count + 1 If Count Mod 2 = 1 Then Me.Section(0).BackColor = 16777215 Else Me.Section(0).BackColor = 12632256 End If End Sub すると 実行時エラー'2135' このプロパティは読み取り専用であるため、設定できません。 と出てしまいました。 どこがダメなのでしょうか?

  • レポート 並べ替えが出来ない フィルタもできない

    この状況と似てるのですが http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1255147152 クロス集計クエリを作り、そのクエリを基にレポートを作成しました。 クエリ内では並べ替えはできます。 ですが、レポートを開く際にはクエリで設定した並べ替えができません。 なので、 Private Sub Report_Open(Cancel As Integer) With Me .OrderBy = "大分類_Index ASC" .OrderByOn = True End With End Sub このように、レポートを開く時に並べ替えを設定したのですが無視されます。 空白以外のみ表示させたいので、 Private Sub Report_Open(Cancel As Integer) Me.Filter = "IsNuLL(大分類)=False" Me.Report.FilterOn = True End Sub もしたのですが、これも無視されます。 クエリでは並べ替えが有効なのに、レポートにすると無視される理由と、 対策をご教授いただければ助かります。 当方アクセス2010です。 よろしくお願いします。

  • Access2003 テーダの並び替えについて

    レポートにて、データの並び替えがうまくいきません。 日付順に並び替えをしていますが、只今日付が古い順に並び替えています。 それを逆にしたいのですが、うまくいきません。 日付が新しい順に並び替えるにはどうしたら良いのでしょうか? 現在、レポートのプロパティでは 開く時・・・[イベントプロシージャ] ******************************************* Private Sub Report_Open(Cancel As Integer) Me.OrderBy = "日付" Me.OrderByOn = True End Sub ******************************************* になっています。 宜しくお願い致します。

  • レポート ちらつきを回避したい

    レポートにデータがない時は Private Sub Report_NoData(Cancel As Integer) Cancel = True End Sub これで、レポートを開くことを回避できるのですが、 一瞬だけレポートが立ち上がり、一瞬で消えます。 この一瞬の動きを非表示にしたいのですが、可能でしょうか? 画面がちらついて見えてしまいます。 Private Sub Report_NoData(Cancel As Integer) DoCmd.Echo False Cancel = True DoCmd.Echo True End Sub エコーを入れてもちらつきを回避できませんでした。

  • ACCESSのフォームからレポートへの変数の引渡し

    フォームで定義した変数をレポートに渡して利用したいがうまく渡せません。 具体的にはクエリー名をレコードソースとして利用するために変数に入れて渡そうとしています。 [フォーム]での変数定義 Dim 抽出種別 as String -----(1) 抽出種別 = "Q抽出未回収" -----(2) [レポート]開く時のイベントプロシージャー Private Sub Report_Open(Cancel As Integer) Me.RecordSource = 抽出種別 -----(3) End Sub 実行結果は印刷の各フィールドの項目に #Name? と表示されてしまいます。 (3)で変数を使わずに"Q抽出未回収"とやるとうまくプレビューされます。 変数の定義の方法や場所などいまいち理解が出来ていないものと思います。 フォームからレポートへの変数の引渡しはどうやってやればうまく出来るのでしょうか?

  • Access レポートの詳細Formatに複数の式

    いつもお世話になっています。 レポートの詳細に結婚して姓が変更になった場合、旧姓に取り消し線を引く という式を作成しました。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) If 新姓 <> "" Then Me.取り消し線1.Visible = True Me.取り消し線2.Visible = True Else Me.取り消し線1.Visible = False Me.取り消し線2.Visible = False End If End Sub 今回は、住所も変更になって新住所が入力されたら、旧住所に取り消し線を引きたいと 思います。 ただし、変更にならない場合もあるので、別のIF文になります。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) If 新住所 <> "" Then Me.取り消し線3.Visible = True Me.取り消し線4.Visible = True Else Me.取り消し線3.Visible = False Me.取り消し線4.Visible = False End If End Sub レポートの詳細_Formatに複数の条件を設定することができるのでしょうか。 お力添えをお願いいたします。

専門家に質問してみよう