MDEファイルからレポート印刷できません。
下記構文の下から4行目「acViewDesign」を開けないからだと思います。
回避しようと「acViewDesign」を省くようにいろいろ試みているのですが、
レポート印刷はできるようになっても、
レポート内容(詳細セクション)が空になってしまいます。
どなたかご教授くだされば幸いです。
よろしくお願いいたします。
----------------------------------------------------------------------
Dim strDate As String
strDate = "#" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "/" & Year(Me.txt日付) & "#"
Sql = "SELECT * FROM q棚卸_結果表示 WHERE 日付 = " & strDate & " " & strWhere & "ORDER BY メーカー名, カナ"
DoCmd.OpenReport "r棚卸_結果表示", acViewDesign
[Reports]![r棚卸_結果表示].[RecordSource] = Sql
DoCmd.OpenReport "r棚卸_結果表示", acViewPreview
End Sub
----------------------------------------------------------------------
No.1
- 回答日時:
MDEファイルにするとデザインビューには
どう転んでもできませんから、
どうしても、レポートを開くときにレコードソースを
設定しなければならない理由がないのなら、
Month(Me.txt日付)の部分を
Month(Forms!フォーム名!txt日付)などのように
他の部分も同じように変更して、レポートの
レコードソースに最初から設定しておけば
いいのでは、と思いますが。 strWhereの
内容はわかりませんが、このようなところです。
この回答への補足
>
> strWhereの内容はわかりませんが、
>
このような内容です。よい方法はありますでしょうか。。。
'WHERE条件の作成-------------------------------------
If Me.txtSchコード <> "" Then
strWhere = strWhere & " AND 商品コード = '" & Me.txtSchコード & "'"
End If
If Me.txtSchSyouhinName <> "" Then
strWhere = strWhere & " AND (商品名 LIKE '*" & Me.txtSchSyouhinName & "*' OR カナ LIKE '*" & Me.txtSchSyouhinName & "*')"
End If
If Me.cmbSchMaker <> "" Then
strWhere = strWhere & " AND メーカー名 = '" & Me.cmbSchMaker & "'"
End If
If Me.cmbSchBunrui <> "" Then
strWhere = strWhere & " AND 大分類 = '" & Me.cmbSchBunrui & "'"
End If
Dim strDate As String
strDate = "#" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "/" & Year(Me.txt日付) & "#"
Sql = "SELECT * FROM q棚卸_結果表示 WHERE 日付 = " & strDate & " " & strWhere & "ORDER BY メーカー名, カナ"
DoCmd.OpenReport "r棚卸_結果表示", acViewDesign
[Reports]![r棚卸_結果表示].[RecordSource] = Sql
DoCmd.OpenReport "r棚卸_結果表示", acViewPreview
piroin654様、ありがとうございます。
> Month(Me.txt日付)の部分を
> Month(Forms!フォーム名!txt日付)
をやってみましたが構文のエラーになってしまいました。
きっとそれだけではだめなのでしょうね。
もう少し勉強してみます。
No.2
- 回答日時:
ORDER BY ・・・が無ければ、Docmd.OpenReport・・・にWhere条件を付ければ済む問題なのですけど。
q棚卸_結果表示クエリのSQL文を書き換えてしまうとか、
(過去ログで、QueryDef について調べてみてください)
もっとシンプルな方法があったような気もします。
でも、その前に
Sql = "SELECT * FROM q棚卸_結果表示 WHERE 日付 = " & strDate & " " & strWhere & "ORDER BY メーカー名, カナ"
Debug.print Sql でSQL文の確認をするとか
新規クエリのSQLビューに貼り付けて、希望した結果が得られるか確認する方が先決です。
nicotinism様、ありがとうございます。
私の方が素人すぎてせっかく戴いたアドバイスを有効活用できないのが
残念です。
もう少し勉強してみます。
No.3
- 回答日時:
一つ気になるのは
Sql = "SELECT * FROM q棚卸_結果表示 WHERE 日付 = " & strDate & " " & strWhere & "□ORDER BY メーカー名, カナ"
で、ORDER BY 句の前にスペースが無いことです。(でもこの場合はエラーで止まるはず?)
Sql = "SELECT * FROM q棚卸_結果表示 WH・・・の次の行で
Debug.print Sql
Exit Sub
としてイミディエイトウィンドウ(出してなければ、Ctrl + G で出ます)に
Sqlの内容が出力されてます。
このSQL文を新規クエリのSQLビューに貼り付けてみたらということです。
あるいはここにでも。
問題の切り分けのためにWhere条件を少しずつ増やして動作確認してみてもよいですね。
なお、今回の問題とは関係ないと思いますが、「SQL」はAccessの予約語です。
http://office.microsoft.com/ja-jp/access-help/HA …
私も変数名に結構長いこと知らずに使ってましたがエラーになった事はありませんけど一応。
No.4
- 回答日時:
いろいろ検索条件がある場合に、無理にデータをレポートに
突っ込む方法を考えるよりも、レポートのレコードソースとして
必要なフィールド(もちろん型の設定も)をもった空のテーブルを
作成し、それをレポートのレコードソースにし、
q棚卸_結果表示の抽出条件でレコードを取り出し、それを
作業用テーブルにいれることを考えれば、フォームをデザインビュー
にして、レコードソースを設定して・・・などのような
ことは考える必要はなくなります。
作業用テーブルをTレポート用とします。
フィールドは上記の通りです。
一応概略を言いますと、
(1)
q棚卸_結果表示で帳票フォームを作成
(2)
出来たフォームにテキストボックス、コンボボックス、コマンドボタン設定
(3)
ボタンクリックでフォームにフィルタをかけ、抽出したデータを
テーブルにエクスポート。このときのフィルタ条件は補足の条件を
そのままフォームに適用。
(4)
レポートを開く
(5)
必要に応じて次のレポート作成のために
テーブルを初期化。
このような感じです。コードは書いていませんが、
ちょっとサンプルを作って確認してみます。
No.5
- 回答日時:
No4の説明で、
>q棚卸_結果表示の抽出条件でレコードを取り出し、
は、
q棚卸_結果表示を抽出条件でフィルタかけレコードを抽出し
です。ちょっと言い方が変でした。
No.6
- 回答日時:
一応、確認したので作成手順とコードを載せます。
【作成手順】
(1) レポートのレコードソース用テーブルの作成
q棚卸_結果表示で表示される全フィールドを新しい
テーブルに設定し、その名前を「Tレポート用」とします。
フィールドの型はq棚卸_結果表示の基になる
テーブルのフィールドの型を設定してください。
(2) レポートの作成
(1)で作成した「Tレポート用」を基に新規作成から表形式
を選択し、出来たレポートを「r棚卸_結果表示」とします。
レポートをデザインビューで開き、プロパティから、
レコードソースの右端をクリックしてクエリビルダを
開き、フィールドをすべて設定し、メーカー名とカナの
並び替えを設定します。
(3) フォームの作成
新規作成から「q棚卸_結果表示」を基にして表形式
のフォームを作成します。名前を一応「F棚卸」とします。
出来たフォームをデザインビューにし、詳細のところに
マウスを当て、十字になったら詳細を適当に押し下げ、
残りのラベルも詳細のところにもっていきます。
次に、以下のテキストボックス、コンボボックス、
ボタンを設定します。
txt日付
txtSchコード (テキストボックス)
txtSchSyouhinName (テキストボックス)
cmbSchMaker (コンボボックス)
cmbSchBunrui (コンボボックス)
cmd抽出 (ボタン)
cmdレポート (ボタン)
(4) フォームのボタンクリック時の設定
Private Sub cmd抽出_Click()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim strWhere As String
Dim strQry As String
'Tレポート用の初期化のSQL文
strQry = "DELETE * FROM Tレポート用;"
'日付が必ず入力されているものとします
'日付が未入力ならプロシージャを終了
If IsNull(Me!txt日付) Then
MsgBox ("日付が設定されていません")
Exit Sub
End If
'strWhereを日付から設定
strWhere = strWhere & "#" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "/" & Year(Me.txt
日付) & "#"
If Me.txtSchコード <> "" Then
strWhere = strWhere & " AND 商品コード = '" & Me.txtSchコード & "'"
End If
If Me.txtSchSyouhinName <> "" Then
strWhere = strWhere & " AND (商品名 LIKE '*" & Me.txtSchSyouhinName & "*' OR カナ LIKE
'*" & Me.txtSchSyouhinName & "*')"
End If
If Me.cmbSchMaker <> "" Then
strWhere = strWhere & " AND メーカー名 = '" & Me.cmbSchMaker & "'"
End If
If Me.cmbSchBunrui <> "" Then
strWhere = strWhere & " AND 大分類 = '" & Me.cmbSchBunrui & "'"
End If
Me.Filter = strWhere
Me.FilterOn = True
Set db = CurrentDb
Set rs1 = Me.RecordsetClone
Set rs2 = db.OpenRecordset("Tレポート用", dbOpenDynaset)
'Tレポート用の初期化
db.Execute strQry1
'Tレポート用への抽出レコードの書き込み
If rs1.RecordCount > 0 Then
rs1.MoveFirst
Do Until rs1.EOF
rs2.AddNew
rs2!日付 = rs1!日付
rs2!商品コード = rs1!商品コード
rs2!商品名 = rs1!商品名
rs2!カナ = rs1!カナ
rs2!メーカー名 = rs1!メーカー名
rs2!大分類 = rs1!大分類
rs2.Update
rs1.MoveNext
Loop
End If
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
End Sub
Private Sub cmdレポート_Click()
DoCmd.OpenReport "r棚卸_結果表示", acViewPreview
End Sub
以上です。(4)のテーブルへの書き込みのところでは
フィールドはこちらで推定して並べました。実際に
合わせて変更してください。
No.7
- 回答日時:
No6の(4)のコードの途中が崩れて表示されたので
(4)のところをもう一回。
(4) フォームのボタンクリック時の設定
Private Sub cmd抽出_Click()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim strWhere As String
Dim strQry As String
'Tレポート用の初期化のSQL文
strQry = "DELETE * FROM Tレポート用;"
'日付が必ず入力されているものとします
'日付が未入力ならプロシージャを終了
If IsNull(Me!txt日付) Then
MsgBox ("日付が設定されていません")
Exit Sub
End If
'strWhereを日付から設定
strWhere = strWhere & "#" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "/" & Year(Me.txt日付) & "#"
If Me.txtSchコード <> "" Then
strWhere = strWhere & " AND 商品コード = '" & Me.txtSchコード & "'"
End If
If Me.txtSchSyouhinName <> "" Then
strWhere = strWhere & " AND (商品名 LIKE '*" & Me.txtSchSyouhinName & "*' OR カナ LIKE '*" & Me.txtSchSyouhinName & "*')"
End If
If Me.cmbSchMaker <> "" Then
strWhere = strWhere & " AND メーカー名 = '" & Me.cmbSchMaker & "'"
End If
If Me.cmbSchBunrui <> "" Then
strWhere = strWhere & " AND 大分類 = '" & Me.cmbSchBunrui & "'"
End If
Me.Filter = strWhere
Me.FilterOn = True
Set db = CurrentDb
Set rs1 = Me.RecordsetClone
Set rs2 = db.OpenRecordset("Tレポート用", dbOpenDynaset)
'Tレポート用の初期化
db.Execute strQry1
'Tレポート用への抽出レコードの書き込み
If rs1.RecordCount > 0 Then
rs1.MoveFirst
Do Until rs1.EOF
rs2.AddNew
rs2!日付 = rs1!日付
rs2!商品コード = rs1!商品コード
rs2!商品名 = rs1!商品名
rs2!カナ = rs1!カナ
rs2!メーカー名 = rs1!メーカー名
rs2!大分類 = rs1!大分類
rs2.Update
rs1.MoveNext
Loop
End If
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
End Sub
Private Sub cmdレポート_Click()
DoCmd.OpenReport "r棚卸_結果表示", acViewPreview
End Sub
No.8ベストアンサー
- 回答日時:
No6、No7と作成しておいて、何ですが。
q棚卸_結果表示を開けばそのままデータが
表示できないものであるかもしれない
という前提でつくっています。いくつかの
フォームなどのデータによるフィルタ
がかかっているかもしれない、という
ことです。
しかし、q棚卸_結果表示を単独で開けばそのまま
データが表示できるものであるとするならば、
簡易な方法で言えば、やはりフィルタをレポートの
レコードソースにそのままかけるのが一番ですが。
No1の考えをフィルタにするならば、
(1) レポートの作成
r棚卸_結果表示のレコードソースをq棚卸_結果表示
として、レポートをデザインビューで開き、プロパティから、
レコードソースの右端をクリックしてクエリビルダを
開き、フィールドをすべて設定し、メーカー名とカナの
並び替えを設定します。
(2) フォームの作成その(1)
新規作成から「q棚卸_結果表示」を基にして表形式
のフォームを作成します。名前を一応「F棚卸」とします。
出来たフォームをデザインビューにし、詳細のところに
マウスを当て、十字になったら詳細を適当に押し下げ、
残りのラベルも詳細のところにもっていきます。
次に、以下のテキストボックス、コンボボックス、
ボタンを設定します。
txt日付
txtSchコード (テキストボックス)
txtSchSyouhinName (テキストボックス)
cmbSchMaker (コンボボックス)
cmbSchBunrui (コンボボックス)
cmd抽出 (ボタン)
Private Sub コマンド20_Click()
Dim strWhere As String
Dim strQry1 As String
'Tレポート用の初期化のSQL文
strQry1 = "DELETE * FROM Tレポート用;"
'日付が必ず入力されているものとします
If IsNull(Me!txt日付) Then
MsgBox ("日付が設定されていません")
Exit Sub
End If
'strWhereを日付から設定
'strWhere = strWhere & "#" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "/" & Year(Me.txt日付) & "#"
strWhere = strWhere & "#" & Year(Me.txt日付) & "/" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "#"
If Me.txtSchコード <> "" Then
strWhere = strWhere & " AND 商品コード = '" & Me.txtSchコード & "'"
End If
If Me.txtSchSyouhinName <> "" Then
strWhere = strWhere & " AND (商品名 LIKE '*" & Me.txtSchSyouhinName & "*' OR カナ LIKE '*" & Me.txtSchSyouhinName & "*')"
End If
If Me.cmbSchMaker <> "" Then
strWhere = strWhere & " AND メーカー名 = '" & Me.cmbSchMaker & "'"
End If
If Me.cmbSchBunrui <> "" Then
strWhere = strWhere & " AND 大分類 = '" & Me.cmbSchBunrui & "'"
End If
Me.Filter = strWhere
Me.FilterOn = True
DoCmd.OpenReport "r棚卸_結果表示", acViewPreview, strWhere
End Sub
(3) フォームの作成その(2)
(2)とは違い、単なる単票形式では、フォームの
レコードソースを設定せずに、
txt日付
txtSchコード (テキストボックス)
txtSchSyouhinName (テキストボックス)
cmbSchMaker (コンボボックス)
cmbSchBunrui (コンボボックス)
cmd抽出 (ボタン)
を設定し、
(2)から
Me.Filter = strWhere
Me.FilterOn = True
を除けば出来てしまいます。
何だかだんだん簡易になっていくような感じですが、
だいたいこのようなところです。
No.7を元に対策し、MDEで試して不具合が無い事が確認できました。
無事、目的を達成する事ができました。たいへん助かりました。
(No.8も、勉強のために後日試してみます。)
piroin654さんの大切なお時間をいただいたこと、とても感謝しています。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセル365のVBAで困っています。どう修正したらよいか添削をお願いします 2 2023/05/03 17:35
- PHP PHP MySql ページング 2 2022/09/20 06:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンで購入したデーターが...
-
差し込み印刷に当日の日付が入...
-
日付の大小の表現
-
「24日の0時」って・・・
-
「時間」、「期日」、「日付」...
-
エクセル マクロ 名前を付けて...
-
回覧板の日付について質問です...
-
ACCESSで日付を指定すると、そ...
-
エクセルで6ヵ月後を自動入力で...
-
Access 2013 テキストボックス...
-
履歴書の日付間違いで落ちますか。
-
ACCESSで1月1日~12月31日まで...
-
EXCELで日付を****年上期、****...
-
accessのレポート抽出条件について
-
Excelでヘッダに前日の日付を表...
-
WEEKDAYが反映されない
-
日付の表記(付け)
-
Access VBA SQL文で教えてください
-
wordで日付
-
エクセルで日付け表示で、明治...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンで購入したデーターが...
-
「24日の0時」って・・・
-
回覧板の日付について質問です...
-
差し込み印刷に当日の日付が入...
-
日付の大小の表現
-
「時間」、「期日」、「日付」...
-
エクセル マクロ 名前を付けて...
-
エクセルで日付別にシートを分...
-
履歴書の日付間違いで落ちますか。
-
EXCELで日付を****年上期、****...
-
エクセルで6ヵ月後を自動入力で...
-
ACCESSで日付ごとに自動連番(...
-
WEEKDAYが反映されない
-
2つの日付の中間の日付 エク...
-
Excelでヘッダに前日の日付を表...
-
エクセルで日付け表示で、明治...
-
ACCESSで1月1日~12月31日まで...
-
アンドロイドスマホ。カメラに...
-
差込印刷 縦書きで和暦(漢数...
-
Excel関数 基準日に一番近い指...
おすすめ情報