• ベストアンサー

MSアクセス ページ設定値

レポートAのページ設定をした後、その設定値をレポートBにも同じくする方法を教えて下さい。 On Error Resume Next DoCmd.SelectObject acReport, "レポートA", True DoCmd.RunCommand acCmdPageSetup ' "レポートA".設定値 = "レポートB".設定値 こんな感じで On Error GoTo 0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

Set rpt2.Printer = rpt.Printer だけで内容が反映されるのが謎です・・・ こんな感じでも試してみてください。 Sub Test() Dim rpt As Report, rpt2 As Report On Error GoTo g001 Application.Echo False DoCmd.OpenReport "レポートA", acViewPreview DoCmd.OpenReport "レポートB", acViewDesign Set rpt = Reports("レポートA") Set rpt2 = Reports("レポートB") rpt2.Visible = False 'これがミソ rpt2.Printer = rpt.Printer 'rptで指定したプリンターを使う場合 'rpt2.UseDefaultPrinter = True 'OS既定のプリンターの場合 'この二行は必要に応じて。無くても可 With rpt2.Printer 'レポートの設定を逐一指定する必要があったような。 .TopMargin = rpt.Printer.TopMargin .BottomMargin = rpt.Printer.BottomMargin .LeftMargin = rpt.Printer.LeftMargin .RightMargin = rpt.Printer.RightMargin '中略 End With DoCmd.Close acReport, "レポートA", Save:=acSaveNo DoCmd.Close acReport, "レポートB", Save:=acSaveYes Set rpt = Nothing Set rpt2 = Nothing Application.Echo True Exit Sub g001: Application.Echo True If IsEmpty(rpt) = False Then Set rpt = Nothing If IsEmpty(rpt2) = False Then Set rpt2 = Nothing MsgBox err.Number & vbCrLf & err.Description End Sub

situmonnsya
質問者

お礼

ありがとうございました。 ご教授頂いたコードで、プリンタ環境の違う状況で確認しました。 うまくいってます。 >レポートの設定を逐一指定する必要があったような。 >中略 中略の部分が長くて~~ 必要な分だけ探してやってます。 「NotFound404」様今後もよろしくお願い致します。

その他の回答 (1)

回答No.1

こちらを熟読されると解決するものと思います。 Microsoft Access 2002 でのプリンタ設定のプログラミング http://msdn.microsoft.com/ja-jp/library/cc325884.aspx レポートをデザインビューで開いて reports("こっち").Printer.TopMargin = reports("あっち").Printer.TopMargin のようになるかと。

situmonnsya
質問者

お礼

ありがとうございます。 少し不安ですが、自己解決してます。 Dim rpt, rpt2 As Report On Error GoTo g001 DoCmd.OpenReport "レポートA", acViewPreview DoCmd.RunCommand acCmdPageSetup Set rpt = Reports("レポートA") DoCmd.OpenReport "レポートB", acViewPreview Set rpt2 = Reports("レポートB") Set rpt2.Printer = rpt.Printer Set rpt = Nothing Set rpt2 = Nothing g001: On Error GoTo 0 Exit Sub 上記でとりあえず動いています。 正しい記述はどうなのかわかりませんが。

situmonnsya
質問者

補足

お礼を書いた後ですが・・・ 自己解決したコードだけでは不安定でした。 "レポートB"を再度開くと反映されてませんでした。 DoCmd.Close acReport, "レポートB", acSaveYes の1行を追加してもダメですが、 "レポートB"を閉じる前に手動で「Ctlo+s」だと反映されました。

関連するQ&A

  • ACCESSの印刷ダイアログについて

    いつも大変お世話になっております。 レポートをFILTER(県名)で抽出した状態でプレビューしたいと思い以下のようにPGを組みました。 DoCmd.OpenReport "レポートR", acViewPreview Reports!レポートR.Filter = "[県名] Like '*" & txtbox_県名1 & "*'" Reports!レポートR.FilterOn = True プレビューはうまくいきましたが、この抽出した状態で印刷したいのですがどうすればいいのでしょうか。また、印刷の前に印刷ダイアログをだしたいと思い、 DoCmd.SelectObject acReport, "レポートR", False DoCmd.RunCommand acCmdPrint と組んだのですが全件印刷されてしまいます。 ご教授宜しくお願いします。

  • Access2007 外部MDBコントロール

    Access2007 外部MDBコントロール 使用OS:xp Access:2007 いつもお世話になっております。 Access2007のVBA(GetObject)を利用して、外部MDBをコントロールしたいと考えております。 「実現したい内容」 3つのMDBが存在します。 A.mdb B.mdb C.mdb A.mdbにコードを書いて、B.mdbにC.mdb内のレポート「レイアウト」をインポートします。 ******************************************************************************************************* Dim ACC As Access.Application Set ACC = GetObject("B.mdbのフルpath") '外部MDBへ接続 DoCmd.SetWarnings False On Error Resume Next ACC.DoCmd.DeleteObject acReport, "レイアウト" 'レポートの削除 On Error GoTo 0 ACC.DoCmd.TransferDatabase acImport, "Microsoft Access", "C.mdbのフルpath", acReport, "レイアウト", "レイアウト", False ACC.CloseCurrentDatabase Set ACC = Nothing ******************************************************************************************************* 実行するとレポート「レイアウト」はB.mdbに格納(インポート)されるのですが、 その際、C.mdbが一旦起動し、データベースウインドウが開いて閉じる動作が走ってしまします。(当然だと思いますが) その動きを止める(裏でコードが走る状態)ことはできないでしょうか。 以前Access2000で同じコードを実行したときは画面の切り替えはなく、裏で実行されていました。 過去質問をうまく検索できずご質問させていただきます。 ご教授の程宜しくお願い申し上げます。

  • Access コマンドボタンからの印刷

    Access2003を使用し、フォームにコマンドボタンを追加して、そのボタンからレポートの印刷を行なおうとしています。 印刷ダイアログボックスを表示し、直前で印刷のキャンセルもできるようにと下記のように記述しました。 Private Sub 印刷1_Click() On Error GoTo Err_印刷1_Click '[印刷]ダイアログボックスを表示した後、印刷 DoCmd.SelectObject acReport, "レポート1", True DoCmd.RunCommand acCmdPrint DoCmd.OpenReport "レポート1", acViewNormal '正常終了処理 Exit_印刷1_Click: Exit Sub 'エラー発生時 Err_印刷1_Click: Select Case Err.Number Case 2501 Exit Sub Case Else End Select End Sub しかし、これを実行し、印刷すると、なぜか2部印刷されます。 どうやら2回処理が実行されているようです。 また、試しに印刷ダイアログボックスで通常使用しないプリンタを選択してみたら、選択したプリンタから1部、通常使用のプリンタから1部出力されてしまいました。 初心者なもので原因がわからず困惑しております。 どなたか解決方法のご教授お願い致します。

  • アクセス 開いているレポート名を取得する。

    アクセス初心者です。 VBAにて フォーム1でレポート、レコードを選択後に レポートを開くと同時に印刷フォームも開くように組んでます。 その印刷フォームで印刷をすると、印刷フォーム自体が印刷されてしまうので ”レポート名”を認識させてから印刷しています。 その時の”レポート名”を開いたときに自動的に変数として印刷フォームに引き継ぎたいのですが やり方が分かりません。 意図としては、印刷フォームを汎用的に使いたいためです。 印刷フォームの呼び出しコードは下記にて Private Sub コマンド18_Click() Dim report_name As String Dim report_value As String If Not IsNull(コンボ50.Value) = True Then report_name = コンボ48.Value  ’レポート名です report_value = コンボ50.Value DoCmd.OpenReport report_name, acViewPreview, , "[現場名]='" & report_value & "'" DoCmd.MoveSize Width:=10000, Height:=13000 Reports(report_name).ZoomControl = 75 Else MsgBox "項目を選択してください。" End End If DoCmd.OpenForm "印刷_フォーム", acNormal End Sub Private Sub コマンド53_Click() Dim new_date As String Dim form_name As String If Not IsNull(コンボ48.Value) = True Then form_name = コンボ48.Value DoCmd.OpenForm form_name, acNormal, , , acFormAdd DoCmd.MoveSize Width:=12000, Height:=13000 Else MsgBox "[取引先名]を入力してください。" End If End Sub 下記は印刷フォームにて、印刷設定をする場合のコードです Private Sub コマンド0_Click() Dim report_name As String report_name = "レポート名" On Error Resume Next DoCmd.SelectObject acReport, report_name, True DoCmd.RunCommand acCmdPrint End Sub

  • レポート印刷時のエラー

    いつもお世話になっております。 下記のコードで、レポート印刷時にプリンタダイアログを表示させて、保存するファイル名を「仕分け作業登録リスト_AWB」にしたいと思いますが、下記のエラーがでてしまいます。 ※AWBはR-Sorting NoteのAWBの値を持ってきたいです。 エラー内容 予期せぬエラーが発生しました。 エラーナンバー:3265 エラー内容:要求された名前、または序数に対応する項目がコレクションで見つかりません。 エラー3265についてネットで調べてみましたが、自分ではわからないので、 対処方法を教えていただければと思います。 ※コードも独学なのできれいでなくてすみません。 Private Sub Cmd_Report_Click() On Error GoTo Err_Cmd_Report_Click Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset '指定したレポートを印刷プレビューで開く Dim strReportName1 As String strReportName1 = "R_Sorting Note" pdfName = "仕分け作業登録リスト_" & rs!AWB DoCmd.OpenReport strReportName1, acViewPreview DoCmd.OutputTo acOutputReport, strReportName1, acFromatPDF, pdfName, True DoCmd.RunCommand acCmdPrint 'ダイアログの表示 'プレビューを閉じる DoCmd.Close acReport, strReportName1 Exit_Cmd_Report_Click: 'プレビューを閉じる DoCmd.Close acReport, strReportName1 Exit Sub Err_Cmd_Report_Click: If Err.Number = 2501 Then 'エラーを無視する Resume Exit_Cmd_Report_Click Else MsgBox "予期せぬエラーが発生しました" & Chr(13) & _ "エラーナンバー:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbOKOnly End If Resume Exit_Cmd_Report_Click End Sub

  • on error 処理に関して

    on error goto での処理ルーチン内で、 さらに on error goto を出すことは可能でしょうか。 それとも、一度on errorを設定すると、エラーが発生した後では変更は不可なのでしょうか。 やりたいことは、 1回目と、2回目、3回目以降でやることとを変えたいのです。 例えば、メッセージを変えるとか。 この場合、 エラー処理の中で、何回目かを聞くことで、メッセージを変えることは出来ると思うのですが、 それはやらず、 他にも色々やることが多いので、別処理として飛びたいのです。 以下のようなイメージです。 err1: on error goto err2 resume next err2: on error goto err3 resume next err3: resume next 宜しくお願いします。

  • accessでテーブルにレコードが存在しなければ

    access初心者です 検索フォームにて二つのコンボボックスがあり 片方を選択する(コンボA)ともう一方のコンボボックス(コンボB)が変わるVBAを組んでいます。 両方を選択した状態で検索ボタンを押すとレポートが出るようにしてるのですが 1)コンボAに入力後、コンボBを選択 2)その後コンボAを変更するとコンボBは1)の状態 3)そのまま検索を押すとブランクのレポートが出てくる *コンボBの内容がコンボA内に無いため この状態を解決したく、エラートラップかコンボA変更時にコンボBを自動的にブランクに変更 するようにVBAを書きたいのですが、書き方が分かりません。 分かりにくい文章で申し訳ございませんが ご教授お願いいたします。 現状のコードだけ乗っけていきます Private Sub コマンド18_Click() Dim report_name As String Dim report_value As String On Error GoTo error_1 If Not IsNull(コンボ50.Value) = True Then report_name = コンボ48.Value report_value = コンボ50.Value DoCmd.OpenReport report_name, acViewPreview, , "[現場名]='" & report_value & "'" Else MsgBox "項目を選択してください。" End If Exit Sub error_1: MsgBox "項目が存在しません。" Resume Next End Sub

  • 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 動作させるとエラーは出ないのですが、設定値がちっとも反映されません。 何が間違っているのでしょうか?

  • フォームを開いても真ん中に表示されない

    アクセス2007です。 フォームのプロパティで「自動中央寄せ」を「はい」にして Private Sub Form_Load() DoCmd.RunCommand 10 DoCmd.ShowToolbar "Ribbon", acToolbarNo 'リボンを非表示にする Application.CommandBars("Status Bar").Visible = False 'ステータスバーを非表示にする 'ナビゲーションウィンドウを表示しない DoCmd.SelectObject acForm, "", True DoCmd.RunCommand acCmdWindowHide End Sub をすると、真ん中に表示されません。 ナビゲーションウィンドウ分だけ左に寄ってしまいます。 Private Sub Form_Load() 'ナビゲーションウィンドウを表示しない DoCmd.SelectObject acForm, "", True DoCmd.RunCommand acCmdWindowHide DoCmd.RunCommand 10 DoCmd.ShowToolbar "Ribbon", acToolbarNo 'リボンを非表示にする Application.CommandBars("Status Bar").Visible = False 'ステータスバーを非表示にする End Sub のように順番を前後させても結果は同じです。 真ん中表示だけでなく、アプリケーションを最大化しつつ リボン・ステータスバーを非表示に事は不可能でしょうか?

  • Access VBA にて on error goto がたまに機能し

    Access VBA にて on error goto がたまに機能しないPCがあるます。 具体的には、on error gotoのコーディングを無視して、エラーのポップアップが表示される 何か対応する方法は、ありますか? 環境 ネットーワークにあるmdbをドライブに接続して、Accessを起動しています。   Windows2000(sp4)+Access2000(sp3) 他のPCでは、問題ありません。PCは、イメージをクローンして作成していますので、同一です。 ※コーディングイメージ Private Sub 稼働時間_AfterUpdate() on error goto ERR_稼働時間 Dim errcnt as integer errcnt = 0 DoCmd.GotoRecord A_FORM,"時間入力",A_NEXT <----- エラーのポップアップが表示される if errcnt = 1 Then DoCmd.GotoRecord A_FORM,"時間入力",A_PREVIOUS end if exit sub ERR_稼働時間: errcnt = errcnt + 1 resume next end sub