Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルフィルターをかけての印刷について
記事No42727
投稿日: 2011/09/26(Mon) 09:59
投稿者TOM
OS: XP
Access Version: 2007

フォーム上でフィルターをかけて
その内容を印刷したいのですがうまくいかなく困っています
知恵をお貸しください

基本情報フォームから履歴測定設定一覧を開きます

Private Sub 測定測定履歴_Click()

DoCmd.OpenForm "履歴測定設定一覧", acNormal, "", "[Forms]![基本情報フォーム]![ID]=[患者情報クエリ]![ID]", , acNormal

End Sub

履歴測定設定一覧フォームには
サブフォームで履歴測定一覧と履歴設定一覧があり
それぞれ基本情報フォームのJ植え込み日以降のデータで
フィルターをかけています
Private Sub Form_Load()

Me.履歴測定一覧.Form.Filter = "測定日 >=" & "Forms.[基本情報フォーム].J植え込み日"
Me.履歴測定一覧.Form.FilterOn = True

Me.履歴設定一覧.Form.Filter = "設定日 >=" & "Forms.[基本情報フォーム].J植え込み日"
Me.履歴設定一覧.Form.FilterOn = True

End Sub

サブフォームの履歴測定一覧のなかに
コマンドボタンを配置して
表示されたデータを印刷するようにしています

Private Sub 測定一覧印刷_Click()

Forms!メニュー.TimerInterval = 0
MsgBox Me.Filter
DoCmd.OpenReport "レポート測定履歴", acViewPreview, , Me.Filter
DoEvents
On Error GoTo el
DoCmd.RunCommand acCmdPrint
el:
DoCmd.Close acReport, "レポート測定履歴"

Forms!メニュー.TimerInterval = 1000
End Sub

ここまではきちんとフィルターをかけた通りに印刷されるのですが
基本情報フォームのJ植え込み日
以前のデータを見たい時に
すべて表示というコマンドを作成して
以下のコードを作ったのですが
いざ印刷すると
"測定日 >=" & "Forms.[基本情報フォーム].J植え込み日"
のフィルターがかかったままになってしまいます

Function 履歴表示_すべて表示()
On Error GoTo 履歴表示_すべて表示_Err

Dim Active_From As Form

Set Active_From = Screen.ActiveForm

DoCmd.ShowAllRecords

履歴表示_すべて表示_Exit:
Exit Function

履歴表示_すべて表示_Err:
MsgBox Error$
Resume 履歴表示_すべて表示_Exit

End Function

わかりづらいかもしれませんが
よろしくお願いします

タイトルRe: フィルターをかけての印刷について
記事No42728
投稿日: 2011/09/26(Mon) 12:28
投稿者Moko
> MsgBox Me.Filter
  MsgBox Me.FilterOn
> DoCmd.OpenReport "レポート測定履歴", acViewPreview, , Me.Filter

DoCmd.ShowAllRecords では
FilterOn が False になるだけで、Filter の内容は変わりません。

タイトルRe^2: フィルターをかけての印刷について
記事No42729
投稿日: 2011/09/26(Mon) 14:59
投稿者TOM
Mokoさん ありがとうございます

> > MsgBox Me.Filter
> MsgBox Me.FilterOn
> > DoCmd.OpenReport "レポート測定履歴", acViewPreview, , Me.Filter

MsgBox Me.Filterは
フィルターの内容が知りたくて付け加えたものです
掲示板に乗せる際に消すのを忘れてました


> DoCmd.ShowAllRecords では
> FilterOn が False になるだけで、Filter の内容は変わりません。

DoCmd.ShowAllRecordsの後に
Active_From.Filter = "ID = " & "[Forms]![基本情報フォーム]![ID]"
Active_From.FilterOn = True
と付け加えてみましたが
結果は変わらずでした

タイトルRe^3: フィルターをかけての印刷について
記事No42730
投稿日: 2011/09/26(Mon) 15:20
投稿者SEP
> DoCmd.ShowAllRecordsの後に
> Active_From.Filter = "ID = " & "[Forms]![基本情報フォーム]![ID]"
> Active_From.FilterOn = True
どうして全部表示させるのに、またフィルタ掛けてんの?
意味分かって使ってるか?

タイトルRe^4: フィルターをかけての印刷について
記事No42731
投稿日: 2011/09/26(Mon) 15:40
投稿者TOM
> > DoCmd.ShowAllRecordsの後に
> > Active_From.Filter = "ID = " & "[Forms]![基本情報フォーム]![ID]"
> > Active_From.FilterOn = True
> どうして全部表示させるのに、またフィルタ掛けてんの?
> 意味分かって使ってるか?

SEPさん ありがとうございます

意味わかってるかと言われたら ちょっと...
ShowAllRecordsでフォーム上は全表示になるのですが
問題はそれを印刷に反映できないこと
印刷のMe.filterは前のフィルターを参照しているので
もう一度フィルターをかけ直したら
と思ったのですが

タイトルRe^3: フィルターをかけての印刷について
記事No42732
投稿日: 2011/09/26(Mon) 19:50
投稿者Moko
Access Club Access 初・中級者 FORUM でのご質問ですから
前のレス程度で通じると思ったんですけどね、

> DoCmd.OpenForm "履歴測定設定一覧", acNormal, "", "[Forms]![基本情報フォーム]![ID]=[患者情報クエリ]![ID]", , acNormal

この書き方から、スキルはそのレベルよりはちょっと低い、と判断すべきでした。

改めてもう少し詳しく。

> > > MsgBox Me.Filter
> >   MsgBox Me.FilterOn
> > > DoCmd.OpenReport "レポート測定履歴", acViewPreview, , Me.Filter
> 
> MsgBox Me.Filterは
> フィルターの内容が知りたくて付け加えたものです

問題はその行ではなく
付け加えられた
  MsgBox Me.FilterOn
です。
この値がどうなっているかチェックをして
その結果を考慮して
コードをどう修正すれば良いか考えてください、
というつもりでした。

フィルタを設定するときに

> Me.履歴測定一覧.Form.Filter = "測定日 >=" & "Forms.[基本情報フォーム].J植え込み日"
> Me.履歴測定一覧.Form.FilterOn = True

多分、2行目の意味など考えたこともないでしょう。
1度、VBA のヘルプで 「Filter」「FilterOn」を熟読してください。

前のレスでも書いていますが

> DoCmd.ShowAllRecords では
> FilterOn が False になるだけで、Filter の内容は変わりません。

ですから、必要な処理は

・Filter の内容を削除する(空文字列を代入する)

あるいは

・FiterOn の状態によって
 OpenReport の WhereCondition の内容を変える。
 1.IIf関数を使用する
 2.初心者なら分かりやすく、
   If Then Else で WhereCondition アリとナシを使い分ける。
など。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る