出産前後の痔にはご注意!

クエリ「納品書」を元にしたレポート「納品書」(※'クエリ名とレポート名は同名)は
フィールド「顧客番号」(テキスト型)でグループ設定をしています。

レポートをPDF出力する際、グループごとにファイルを保存したいと思います。
しかし、VBA実行時に「パラメータが少な過ぎます。7を指定して下さい。」と
エラーが出てしまい、行き詰まっています。
VBAの知識もほとんど無い為、どこで躓いているか教えていただけないでしょうか。

また、
他サイトで申し訳ありませんが・・・、
●ACCESSVBA レポートをグループ毎に別のPDFファイルとして保存
http://detail.chiebukuro.yahoo.co.jp/qa/question …
こちらの回答を参考に、以下のように作成しました。
(以下、レコードソース)
---------------------------
Const TBL_NAME = "納品書"
Const RPT_NAME = "納品書" 
Const PDF_PATH = "C:\Users\Desktop\

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

rs.Open "SELECT DISTINCT 顧客番号 FROM 納品書", CurrentProject.Connection, adOpenStatic, adLockReadOnly
Do Until rs.EOF

pdfName = rs!顧客番号
DoCmd.OpenReport RPT_NAME, acViewPreview, ,"顧客番号=" & rs!顧客番号, acWindowNormal
DoCmd.OutputTo acOutputReport, RPT_NAME, acFormatPDF, PDF_PATH & Format(date,"yyyymmdd") & ".pdf"
DoCmd.Close
rs.MoveNext

Loop
---------------------------

このQ&Aに関連する最新のQ&A

A 回答 (2件)

どの程度改善できるかは不明です。

単なる思いつきなので試していません。

フォームを一つ作成します。仮に名前を「F_PDF出力」にします。
F_PDF出力のレコードソースを、SELECT DISTINCT 顧客番号 FROM 納品書 にします。
レコードセットはスナップショットにします。
フォーム上に顧客番号のテキストコントロールを置きます。
もう一つ非連結のテキストボックスを置き、コントロールソースには
=[CurrentRecord] & " / " & Count(*) とします。
上はどこまで進んでいるか確認するためです。
あとは、コマンドボタンを一個。

レポートのレコードソースをパラメータークエリにして
上記フォームの顧客番号を参照するようにします。

コマンドボタンのクリック時イベントなどに
Const TBL_NAME = "納品書"
Const RPT_NAME = "納品書" 
Const PDF_PATH = "C:\Users\Desktop\

Docmd.GoToRecord acDataForm,me.name,acFirst
  Do
DoCmd.OutputTo acOutputReport, RPT_NAME, acFormatPDF, PDF_PATH & Format(date,"yyyymmdd") & ".pdf"
    If Me.Recordset.RecordCount = Me.CurrentRecord Then
      MsgBox "最終レコードまで出力しました。"
    Exit Sub
    End If
    Docmd.GoToRecord acDataForm,me.name,acNext
  Loop
とします。
これで上手く行けばプレビューにかかる時間が短縮できるはずです。
    • good
    • 0
この回答へのお礼

どうもありがとうございます!
いただいた回答で作成したところ、大幅に処理時間が短縮されました。

本当に助かりました。
ありがとうございました。

お礼日時:2013/08/28 08:22

どの行でエラーになって止まっていますか?


rs!顧客番号 のデータ型かも。

この回答への補足

ありがとうございます。
ご指摘の箇所のデータ型の不一致でエラーでした。
データ型を数値で合わせたところ、無事動作しました。

しかし、さらに、
顧客番号が100件程あり、
顧客番号件数分レポートの実行、出力を繰り返す為
膨大な処理時間がかかってしまうことに気がつきました・・・。

一度の質問で重ねてお尋ねして申し訳ございませんが、
いちいちレポートを実行せず、1度のレポートを開いた後、
顧客番号ごとにファイルを分けていく方法はないでしょうか?

補足日時:2013/08/21 20:48
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESS2010 レポートを分割しPDF化

ACCESS2010にて、数百件の宛先に向けた通知書を作成しています。

いくつかのテーブルから必要な部分をクエリで抽出し、それをレポートの落とし込む形式です。
レポートは宛先名称等が入ったヘッダーと詳細欄で構成しています。

作成した通知書を、それぞれの宛先ごとにメールへ添付し送付したいのですが、
レポートから印刷でPDF化すると全ての通知書が一つのPDFファイルとして出力されてしまいます。
そのため、メールに添付する際にはひとつひとつ手作業でPDFファイルファイルを分割しなければなりません。
これを一度の印刷作業でヘッダー毎にファイルが作成されるようにはできないのでしょうか。
マクロ、VBAも多少は扱えますのでコードを記述していただいても構いません。

イメージとしては、
【宛先】   A社     B社     C社
【通知書】  A通知書.pdf B通知書.pdf  C通知書.pdf
と出せるようにしたいです。

よろしくお願いいたします。

Aベストアンサー

参考になるかと
http://oshiete.goo.ne.jp/qa/8228404.html
とそのリンク先。

QAccessのレポートからPDFをページ毎に作成

Acrobat StandardがインストールされたマシンでAccessのレポート機能を使って、印刷を行うときに、出力先をAdobePDFにしたいのですが、ページ毎にファイルを分けて印刷を行いたいと考えています。

1ページずつページ指定をして出力するような手動方式ではなく自動で行う方法はありますか。

Aベストアンサー

Sub t()
Dim rpt As Report
Dim rptName As String
Dim printCount As Integer
Dim i As Integer
rptName = "あれを"
DoCmd.OpenReport rptName, acViewPreview ', wherecondition:=""
Set rpt = Reports(rptName)
printCount = rpt.Pages

Do Until i > printCount
DoCmd.PrintOut acPages, i, i
i = i + 1
Loop

DoCmd.Close acReport, rpt.Name
MsgBox "fin"

End Sub
とかで総ページ数を取得して・・
ところで、AdobePDFでは同名の既存ファイルがあった場合、
ファイル名に連番を付加するとか、
既定ファイル名を出力日時にするとかのオプションは
無いのですかね?
当方持ち合わせておりませんので分かりませんが。

あるいは妥協してスナップショットでしたらファイル名を指定できますが・・
DoCmd.OutputTo acOutputReport, "R発注書", "SnapshotFormat(*.snp)", strFileName,

Sub t()
Dim rpt As Report
Dim rptName As String
Dim printCount As Integer
Dim i As Integer
rptName = "あれを"
DoCmd.OpenReport rptName, acViewPreview ', wherecondition:=""
Set rpt = Reports(rptName)
printCount = rpt.Pages

Do Until i > printCount
DoCmd.PrintOut acPages, i, i
i = i + 1
Loop

DoCmd.Close acReport, rpt.Name
MsgBox "fin"

End Sub
とかで総ページ数を取得して・・
ところで、AdobePDFでは同名の既存ファイルがあった場合、
ファイル名に連番を付加す...続きを読む

QAccessフォーム全レコードをPDFで個別保存

使用MS Access 2010

以前から何度かここでお世話になっております。よろしくお願いします。

「受注一覧」という表形式フォームに日々の受注客百件程度が表示されています。レコードのフィールドに[ID]という受注IDコードがあります。
受注確認のメールにPDFの添付ファイルを作成するための「受注確認PDF」というレポートがあり、
それを使って"受注確認書(受注ID:" & [ID] & ")"というファイル名で"C:\PDF"フォルダーに一件(1ページ)づつ保存するボタンを作成する必要に迫られておりますが、ネットでいろいろ調べて、もう少しというところでなかなうまくいきません。

「受注一覧」フォーム上のボタンに レポートを開くマクロの実行(2000回)-次のレコード としたマクロを登録し、「受注確認PDF」レポートの”開くとき”イベントに

Private Sub Report_Open(Cancel As Integer)
DoCmd.OutputTo acOutputReport, "受注確認PDF", acFormatPDF, "C:\PDF"
Reports!受注確認PDF.Caption = "受注確認書(受注ID:" & [ID] & ")"

と書きました。
マクロは上から順にPDFは開いているようなのですが、フォルダーにはPDFが一枚も保存されません。
どうも開いているだけで保存されないようです。
またマクロも最後のレコードになったときのアクションを書いていないため、「次のレコードがありません」というエラーメッセージで終わります。

フォーム上の全件を"受注確認書(受注ID:" & [ID] & ")"という名前で"C:\PDF"に別々にPDFで保存し、最後のレコードになったら完了するVBAを完成したいのですが、どなたか助けていただける方がいたらお願いいたします。当方、VBAは見よう見まねで書いているだけで意味はあまり理解できないレベルです。

使用MS Access 2010

以前から何度かここでお世話になっております。よろしくお願いします。

「受注一覧」という表形式フォームに日々の受注客百件程度が表示されています。レコードのフィールドに[ID]という受注IDコードがあります。
受注確認のメールにPDFの添付ファイルを作成するための「受注確認PDF」というレポートがあり、
それを使って"受注確認書(受注ID:" & [ID] & ")"というファイル名で"C:\PDF"フォルダーに一件(1ページ)づつ保存するボタンを作成する必要に迫られておりますが、ネットでいろいろ...続きを読む

Aベストアンサー

間違いがいくつかあります。

DoCmd.OutputTo acOutputReport, "受注確認PDF", acFormatPDF, "C:\PDF"

上記のコードで、出力ファイル名が指定されていない。
ちゃんと拡張子も含めてファイル名を指定する必用があります。
さらにファイル名には、: は使用できません。

レポートを開くときのイベントでOutputToを実行してますが、このイベントではOutputToは実行できません。フォーム上のボタンのイベントプロシージャで OutputTo を実行しましょう。

「一件(1ページ)づつ保存する」ということですが、具体的にはどのように1件だけ抽出しているのでしょうか。レポートのレコードソースをパラメータクエリにしているのでしょうか。それともレポートを開くアクションで Where条件式を設定しているのでしょうか。

パラメータクエリで、受注一覧フォームの受注IDを参照しているとして回答します。

また、マクロとイベントプロシージャを混在させるのは煩雑ですので、イベントプロシージャのみで記述します。

受注一覧フォーム上のコマンドボタン(コマンド1)のクリック時のイベントプロシージャ

Private Sub コマンド1_Click()
DoCmd.GoToRecord acActiveDataObject, , acFirst
Do
If Me.Recordset.RecordCount = Me.CurrentRecord Then
MsgBox "最終レコードまで出力しました。"
Exit Sub
End If
DoCmd.OutputTo acOutputReport, "受注確認PDF", acFormatPDF, "C:\PDF\受注確認書(受注ID " & Me.顧客コード & ").pdf"
DoCmd.GoToRecord acActiveDataObject, , acNext
Loop
End Sub

間違いがいくつかあります。

DoCmd.OutputTo acOutputReport, "受注確認PDF", acFormatPDF, "C:\PDF"

上記のコードで、出力ファイル名が指定されていない。
ちゃんと拡張子も含めてファイル名を指定する必用があります。
さらにファイル名には、: は使用できません。

レポートを開くときのイベントでOutputToを実行してますが、このイベントではOutputToは実行できません。フォーム上のボタンのイベントプロシージャで OutputTo を実行しましょう。

「一件(1ページ)づつ保存する」ということですが、具体的...続きを読む

QAccessVBAでレポートをPDFで出力

いつもお世話になっております。

現在、AccessVBAを使用して、簡単なレポートを、PDFとして出力するプログラムを立てているのですが、レポート出力をループで回して、VBAよりPDFファイルを自動的に保存したいのですが・・・。

'(テーブル情報のIDが1の情報のみ、PDFで出力)
DoCmd.OpenReport "レポート名", acNormal, , "ID=1"

以上のロジックを、実行すると、「ファイルの保存先ダイアログ」が勝手に開きます・・。

プリンタの設定は事前にAcrobatに設定してあるので、PDF化は容易に出来るのですが、上記のロジックを実際には(IDの数だけ)ループで回しているので、毎回「名前を付けて保存」ダイアログが開くのがとても煩わしいです(:_;)。

VBA上で、保存先を指定して、「名前を付けて保存」ダイアログが開かないようにする方法はないでしょうか?
今日一日調べても有力な手がかりが無かったので、どなたかご教授下さい。

Aベストアンサー

> 開発環境はAccess2000なのですが、PrinterオブジェクトはAccess2002~
> 実装されているオブジェクトのようです。

その通りです。Access2000 ですか...

ほぼ同程度の情報取得関数を自前で用意するしかなさそうですね。
WMI を使ってます。それと MyDocument のパス取得に手抜きで WSH を
使ってますのでご注意を。

2つの関数+使い方サンプルです。
WinXP + Access2002 VBA で動作確認しましたが、多分 Excel や Word VBA
でも動きます。もちろん 多分 Access2000 でも。

自分の限られた環境でしかテストしてないので、できれば動作報告して
いただけると助かります。

Option Explicit

' プリンタ情報を保持する構造体
Public Type PRINTER_STRUCT
  PrinterName  As String  ' プリンタ名
  PortName    As String  ' ポート名
  DriverName   As String  ' ドライバー名
  DefaultPrinter As Boolean ' 通常使うプリンタか?
End Type

' // プリンタを列挙する(WMI版)
Public Function EnumPrinters(ByRef uPrinter() As PRINTER_STRUCT) As Long
  
  ' 引 数: uPrinter PRINTER_STRUCT ここにプリンタ情報が返る
  ' 戻り値: Long 成功時/インストールされたプリンタ数 失敗時: -1
  
  Dim Printers  As Object
  Dim Prt     As Object
  Dim lPrtCount  As Long
  Dim i      As Long
  Set Printers = CreateObject("WbemScripting.SWbemLocator").ConnectServer _
          .ExecQuery("Select * From Win32_Printer")
  lPrtCount = Printers.Count
  ReDim uPrinter(lPrtCount - 1)
  i = 0
  For Each Prt In Printers
    With uPrinter(i)
      .PrinterName = Prt.Caption
      .PortName = Prt.PortName
      .DriverName = Prt.DriverName
      .DefaultPrinter = CBool(Prt.Default)
    End With
    i = i + 1
  Next Prt
  If lPrtCount > 0 Then EnumPrinters = lPrtCount
  Set Printers = Nothing
  Exit Function
ERROR_HANDLER:
  EnumPrinters = -1
End Function

' // PDF プリンタのポート名からデフォルトの保存先パスを取得
Public Function GetPDFSavePath() As String
  
  ' 戻り値: 成功時/PDF プリンタの保存先パス 失敗時/""(長さ0の文字列)
  ' 注 意: 戻り値の終端に¥(パスセパレータ)があるかどうか要チェック
  
  Dim uPrinter() As PRINTER_STRUCT
  Dim lRet    As Long
  Dim lCnt    As Long
  Dim sTmp    As String
  Dim i     As Long
  GetPDFSavePath = ""
  lRet = EnumPrinters(uPrinter)
  If lRet > 0 Then
    lCnt = UBound(uPrinter)
    For i = 0 To lCnt
      ' ドライバー名で PDF プリンタか判定
      If UCase$(uPrinter(i).DriverName) Like "*PDF*" Then
        sTmp = uPrinter(i).PortName
        If UCase$(sTmp) Like "MYDOCUMENT*" Then
          sTmp = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
        Else
          sTmp = Left$(sTmp, InStr(sTmp, "*.pdf") - 1)
        End If
        GetPDFSavePath = sTmp
        Exit For
      End If
    Next i
  End If
  Erase uPrinter
End Function

Sub 使い方()
  ' EnumPrinters 関数
  Dim uPrinter() As PRINTER_STRUCT '<-- 構造体を配列で渡す
  Dim lRet    As Long
  Dim i     As Long
  lRet = EnumPrinters(uPrinter)
  Debug.Print "Installed Printer Device: " & CStr(lRet)
  For i = 0 To lRet - 1
    Debug.Print "----------------------------------------------------------"
    Debug.Print " Name  : " & uPrinter(i).PrinterName
    Debug.Print " Port  : " & uPrinter(i).PortName
    Debug.Print " Driver : " & uPrinter(i).DriverName
    Debug.Print " Default: " & CStr(uPrinter(i).DefaultPrinter)
  Next i
  Erase uPrinter
  Debug.Print "----------------------------------------------------------"
  ' GetPDFSavePath 関数
  Dim sPath As String
  sPath = GetPDFSavePath()
  If sPath = "" Then
    Debug.Print "PDF プリンタ発見できず...orz"
  Else
    Debug.Print "PDF Printer Save Dir Path"
    Debug.Print " " & sPath
  End If
End Sub

> 開発環境はAccess2000なのですが、PrinterオブジェクトはAccess2002~
> 実装されているオブジェクトのようです。

その通りです。Access2000 ですか...

ほぼ同程度の情報取得関数を自前で用意するしかなさそうですね。
WMI を使ってます。それと MyDocument のパス取得に手抜きで WSH を
使ってますのでご注意を。

2つの関数+使い方サンプルです。
WinXP + Access2002 VBA で動作確認しましたが、多分 Excel や Word VBA
でも動きます。もちろん 多分 Access2000 でも。

自分の限られた環境...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qアクセスで#エラーを表示させない方法は?

アクセス2000を使用しています。フォームにテキストボックスを貼り付けて、計算式を入れています。計算できない数値になると、#エラーと表示されます。目障りなので、#エラー という表示を消したいのですが、どうしたらよろしいでしょうか?宜しくお願い申し上げ候。

Aベストアンサー

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の左端にあるコンボボックスで「式」を選択
5)上記コンボボックスの隣が1つのテキストボックスになるので、そこに以下のような式を入力
 IsError([テキスト0])
 ※上記の式は当該テキストボックスの名前が「テキスト0」の場合です。
6)上記テキストボックスの下、右から2番目に「A」と表示された、文字色を指定するボタンがあるので、
 その左の小さな「▼」をクリックし、当該テキストボックスの背景と同じ色(既定では白のはず)を選択
7)『OK』ボタンをクリックしてダイアログを閉じる

・・・以上です。
これで、『テキスト0』の計算式がエラーになった場合は、文字色が背景と同じ色になるので、「#エラー」と
いう表示はされていないように見える、という状態にすることができると思います。

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の...続きを読む

QAccessのレポート機能でソート&抽出条件を指定したい

accessでレポート機能について、質問です。
エクセルでいうフィルタ機能みたいなものはあるのでしょうか。

例えば、以下の場合、職位="B"だけレポートで表示したい場合、
どうすればよいのでしょう?
CD 職位 所属
01  A  東京
02  B  東京 → このデータだけを表示
03  A  大阪

1)クエリを作って、レポートで表示するしかないのでしょうか?
2)レポートのデザインで条件指定ができるのでしょうか?

ソートの条件も変えたいのですが、どの項目をソートするかは、
どこで指定できるのでしょうか?

要はレポートの形式は1つで、様々な抽出条件とソート条件で
レポート表示したいのです。

Aベストアンサー

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示したいのです。
1つレポートの雛形を作って、フィルタと並べ替えのプロパティと並べ替え/グループ化の設定を変えて保存し、複数のレポートを用意する。
入力した値によって変えたい場合は、フォーム上のテキストボックスの値や特定テーブルのレコードの値にを参照するクエリを作り、レポートのレコードソースにする。
またはVBAで処理する。

p.s.
レポートの表示をボタンで起動する場合、VBAやマクロを呼び出します。
VBAやマクロでレポートを開く時に、フィルタやWhere条件式を設定できます。

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示した...続きを読む

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

Qアクセスのレポートのヘッダーを2ページ以降にもつけるには?

アクセスでスタッフの交通費の集計をしレポートに出力しています。1ページ目に所属部署、行き先などヘッダーがあります。2ページ目にも同様のヘッダーを入れたいのですが、どうすればいいのでしょうか?初歩的な質問ですいませんが、困っています。

Aベストアンサー

レポートヘッダーにヘッダーを設定しているとレポートの最初だけ表示されます。
所属部署・行き先等のヘッダーをページヘッダーに移動してレポートヘッダの高さを0にしてください。(レポートヘッダー部に表示するラベル等があればそれに合わせて高さを設定してください。)
そうすれば各ページにヘッダーが表示されます。
ページヘッダーにある各ヘッダーを移動後レポートヘッダー・フッターに何も表示するものがなければレポートヘッダー・フッターを削除してもかまいません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング