Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2237 / 2272 ツリー ←次へ | 前へ→

【3306】レポートのデータがないとき ponpon 04/8/24(火) 12:50 質問[未読]
【3307】Re:レポートのデータがないとき クロ 04/8/24(火) 13:21 回答[未読]
【3308】Re:レポートのデータがないとき ponpon 04/8/24(火) 14:18 質問[未読]
【3309】Re:レポートのデータがないとき クロ 04/8/24(火) 14:46 回答[未読]
【3310】Re:レポートのデータがないとき ponpon 04/8/24(火) 15:54 質問[未読]
【3312】Re:レポートのデータがないとき クロ 04/8/24(火) 16:05 回答[未読]
【3314】Re:レポートのデータがないとき ponpon 04/8/24(火) 17:12 質問[未読]
【3315】Re:レポートのデータがないとき クロ 04/8/24(火) 17:29 回答[未読]
【3318】Re:レポートのデータがないとき ponpon 04/8/24(火) 17:52 質問[未読]
【3319】Re:レポートのデータがないとき クロ 04/8/24(火) 17:59 回答[未読]
【3321】Re:レポートのデータがないとき ponpon 04/8/24(火) 18:17 質問[未読]
【3320】Re:レポートのデータがないとき2 クロ 04/8/24(火) 18:15 回答[未読]
【3322】Re:レポートのデータがないとき2 クロ 04/8/24(火) 18:27 回答[未読]
【3323】Re:レポートのデータがないとき2 ponpon 04/8/24(火) 18:33 お礼[未読]
【3324】Re:レポートのデータがないとき2 クロ 04/8/24(火) 18:38 発言[未読]

【3306】レポートのデータがないとき
質問  ponpon  - 04/8/24(火) 12:50 -

引用なし
パスワード
   こんにちは、時々お世話になってます。
学校で使う図書管理のシステムを作っています。
テーブル図書貸し出し簿からパラメータクエリを使い、期間を限定して
データを抽出しレポートをするように、以下のようなコードを書いています。
データがあるときはこれできちんと動くのですが、データがないときは、抜けたいのですが、データの数を取得する方法がわかりません。
こちらは、初心者ですのでどなたか教えていただけないでしょうか?

Private Sub 児童別貸出簿_Click()
 If IsNull(Me.tx児童名検索) Then
   MsgBox ("児童名を選択してください")
  Exit Sub
 
 Else
  
  DoCmd.OpenReport "児童別図書貸出簿レポート", acViewPreview
  
  If MsgBox("印刷しますか?", vbYesNo) = vbYes Then
   DoCmd.Close acReport, "児童別図書貸出簿レポート"
   
   DoCmd.OpenReport "児童別図書貸出簿レポート", acViewNormal
  End If
  
End If
End Sub

【3307】Re:レポートのデータがないとき
回答  クロ  - 04/8/24(火) 13:21 -

引用なし
パスワード
   児童別図書貸出簿レポートのレコードソースはクエリ(児童名抽出条件付き)でしょうか?
でしたら

Private Sub 児童別貸出簿_Click()
Dim i As Integer
 If IsNull(Me.tx児童名検索) Then
   MsgBox "児童名を選択してください",, vbCritical, "警告"
   Me.tx児童名検索.SetFocus
 
 Else

 i = DCount("*","児童別図書貸出簿レポートのレコードソースクエリ名")

   if i = 0 then
    MsgBox "対象児童名の貸し出しはありません。"
    Exit Sub
   Else
    DoCmd.OpenReport "児童別図書貸出簿レポート", acViewPreview
    If MsgBox("印刷しますか?", vbYesNo) = vbYes Then
     DoCmd.Close acReport, "児童別図書貸出簿レポート"
     DoCmd.OpenReport "児童別図書貸出簿レポート", acViewNormal
    End If
   End if
End If
End Sub

もしクエリでないなら元となるテーブルを使い
i = Dcount("*","テーブル名","[児童名フィールド]='" & Me.tx児童名検索 &"'")

【3308】Re:レポートのデータがないとき
質問  ponpon  - 04/8/24(火) 14:18 -

引用なし
パスワード
   ▼クロ さん:
 早速の回答ありがとうございました。

>児童別図書貸出簿レポートのレコードソースはクエリ(児童名抽出条件付き)でしょうか?
 
 パラメータクエリで、期間と児童名をユーザーフォームから入力するようにしています。


>でしたら
>Private Sub 児童別貸出簿_Click()
>Dim i As Integer
> If IsNull(Me.tx児童名検索) Then
>   MsgBox "児童名を選択してください",, vbCritical, "警告"
>   Me.tx児童名検索.SetFocus
> 
> Else
>
> i = DCount("*","クエリ児童別図書貸出簿")
>
>   if i = 0 then
>    MsgBox "対象児童名の貸し出しはありません。"
>    Exit Sub

  「直前の操作はキャンセルされました」と実行時エラーがでます。


>   Else
>    DoCmd.OpenReport "児童別図書貸出簿レポート", acViewPreview
>    If MsgBox("印刷しますか?", vbYesNo) = vbYes Then
>     DoCmd.Close acReport, "児童別図書貸出簿レポート"
>     DoCmd.OpenReport "児童別図書貸出簿レポート", acViewNormal
>    End If
>   End if
>End If
>End Sub
>
  Dcount関数を使い、クエリ児童別図書貸出簿に「*」(データ)がないときは 抜けろということですよね。
  Dcountの使い方がよくわからないのでヘルプなどで調べてもう一度やってみま す。

【3309】Re:レポートのデータがないとき
回答  クロ  - 04/8/24(火) 14:46 -

引用なし
パスワード
   Access2000なら以下のURLが参考になるかと...
http://support.microsoft.com/default.aspx?scid=kb;ja;416357&Product=accJPN

上記はフォームを閉じるときにとありますがそういう場合以外にも発生するようです。

メニュー>ツール>オプションの全般タブの「名前の自動修正を行う」のチェックを外す
と言う手も有りみたいです。

※ちなみに私の方では「直前のコマンドがキャンセルされました。」のエラーは出ませ 
 ん。
PS:Exit Subは要りませんでした

【3310】Re:レポートのデータがないとき
質問  ponpon  - 04/8/24(火) 15:54 -

引用なし
パスワード
   ▼クロ さん:
>Access2000なら以下のURLが参考になるかと...
>http://support.microsoft.com/default.aspx?scid=kb;ja;416357&Product=accJPN

Access2002、Access2003で作っています。
 読んでみたのですが、日本名を多くしたりするといろいろと不具合があるようですね。解決できないようです。

ところで、
 「図書貸し出し簿」というフォームから期間を指定して、未返却者や学級別、個人別にデータを抽出し、印刷しようとしたのですが、データがないときの処理がわからず、一つわかればいろいろと応用できると考えていました。
 教えていただいた、Dcountをいろいろと使ってコードを書いてみたのですが、パラメータクエリをソースとしたものはだめでしたが、ふつうのパラメータを使わない選択(?)クエリでは、思った通りにうまくデータがないときには、抜けることができました。何か違いがあるのでしょうか?
  

>
>上記はフォームを閉じるときにとありますがそういう場合以外にも発生するようです。
>
>メニュー>ツール>オプションの全般タブの「名前の自動修正を行う」のチェックを外す
>と言う手も有りみたいです。
>
>※ちなみに私の方では「直前のコマンドがキャンセルされました。」のエラーは出ませ 
> ん。
>PS:Exit Subは要りませんでした

【3312】Re:レポートのデータがないとき
回答  クロ  - 04/8/24(火) 16:05 -

引用なし
パスワード
   単なるパラメータでは件のエラーが出ますので、フォームのテキストボックス等を配置されてはどうでしょうか?

【3314】Re:レポートのデータがないとき
質問  ponpon  - 04/8/24(火) 17:12 -

引用なし
パスワード
   ▼クロ さん:
>単なるパラメータでは件のエラーが出ますので、フォームのテキストボックス等を配置されてはどうでしょうか?
 ユーザーフォームの「図書貸し出し簿」で児童名を選択し、cmdボタン児童別貸出簿をクリックすると、ユーザーフォーム「年月日入力3」を開いて期間を入力するようにしましたが、今度はエラーはでなかったのですが、どの児童を選択しても「対象児童の貸し出しはありません」が表示されてしまいます。おそらく年月日の入力が確定する前に Dcount・・・・に進んでしまうのではないかと思うのですが、どうしたらよいのでしょうか?

Private Sub 児童別貸出簿_Click()
Dim i As Integer
 If IsNull(Me.tx児童名検索) Then
   MsgBox "児童名を選択してください", vbCritical
  Me.tx児童名検索.SetFocus
 Else
  DoCmd.OpenForm "年月日入力3"

   i = DCount("*", "クエリ児童別図書貸出簿")

  If i = 0 Then
    MsgBox "対象児童名の貸し出しはありません。"
    DoCmd.Close acForm, "年月日入力3"
    
    Exit Sub
  Else
   DoCmd.OpenReport "児童別図書貸出簿レポート", acViewPreview
   If MsgBox("印刷しますか?", vbYesNo) = vbYes Then
    DoCmd.Close acReport, "児童別図書貸出簿レポート"
   
    DoCmd.OpenReport "児童別図書貸出簿レポート", acViewNormal
   End If
  End If
End If
End Sub

【3315】Re:レポートのデータがないとき
回答  クロ  - 04/8/24(火) 17:29 -

引用なし
パスワード
   クエリ児童別図書貸出簿の抽出条件にフォーム「年月日入力3」のテキストボックスを
入れましたか?
期間であるから
Between [Forms]![年月日入力3]![期間初] And [Forms]![年月日入力3]![期間終]
みたいに
この部分にパラメータがあるなら上記のように書き換えてください。
※期間初/期間終は仮称ですので注意

※フォーム「図書貸し出し簿」もフォーム「年月日入力3」も閉じてはダメですよ。
 不可視にするのは可(Me.Visible = False)

※DoCmd.Close acForm, "年月日入力3"を入れるなら
 DoCmd.OpenReport "児童別図書貸出簿レポート", acViewNormalの後に...

私的にはフォーム「図書貸し出し簿」内に期間を入れるテキストボックスを配置した
方が楽ではないかと思うのですが...その他の条件があるならそれも

【3318】Re:レポートのデータがないとき
質問  ponpon  - 04/8/24(火) 17:52 -

引用なし
パスワード
   ▼クロ さん:
早速の回答ありがとうございます。

>クエリ児童別図書貸出簿の抽出条件にフォーム「年月日入力3」のテキストボックスを
>入れましたか?
>期間であるから
>Between [Forms]![年月日入力3]![期間初] And [Forms]![年月日入力3]![期間終]
>みたいに
>この部分にパラメータがあるなら上記のように書き換えてください。

きちんと入れています。


>※期間初/期間終は仮称ですので注意
>
>※フォーム「図書貸し出し簿」もフォーム「年月日入力3」も閉じてはダメですよ。

 期間を入れてOKをクリックすると閉じるようにしていましたのでやめました。
 このようにすると、はじめに「年月日入力3」のフォームと「対象児童名の貸し出しはありません」が同時に出てきます。「対象児童名の貸し出しはありません」をOKをクリックすると「年月日入力3」が残るので年月日を入力して、もう一度cmd児童別貸出簿をクリックすると、貸し出しのある児童のレポートが表示されます。
「年月日入力3」の入力が確定するまで、Dcoun・・・・にいかない方法は、何のですかね?


> 不可視にするのは可(Me.Visible = False)
>
>※DoCmd.Close acForm, "年月日入力3"を入れるなら
> DoCmd.OpenReport "児童別図書貸出簿レポート", acViewNormalの後に...
>
>私的にはフォーム「図書貸し出し簿」内に期間を入れるテキストボックスを配置した
>方が楽ではないかと思うのですが...その他の条件があるならそれも

フォーム「図書貸し出し簿」は児童が操作するように考えて作りました。パスワード入力で先生用のコマンド出てくるように考えたのですが・・・もう一度考え直して児童用と先生用と作った方が手っ取り早いみたいですね。

【3319】Re:レポートのデータがないとき
回答  クロ  - 04/8/24(火) 17:59 -

引用なし
パスワード
   Private Sub 児童別貸出簿_Click()
Dim i As Integer
DoCmd.OpenForm "年月日入力3"
 If IsNull(Me.tx児童名検索) Then
   MsgBox "児童名を選択してください", vbCritical
  Me.tx児童名検索.SetFocus
 Else
<以下省略>

Ifの前で「年月日入力3」を開いてはどうでしょうか?

【3320】Re:レポートのデータがないとき2
回答  クロ  - 04/8/24(火) 18:15 -

引用なし
パスワード
   cmdボタン児童別貸出簿のクリック時のイベントには
 If IsNull(Me.tx児童名検索) Then
  MsgBox "児童名を選択してください", vbCritical
  Me.tx児童名検索.SetFocus
 Else
  DoCmd.OpenForm "年月日入力3"
 End If

これだけにして

フォーム「年月日入力3」にコマンドボタンを設置して
クリック時のイベントに

Dim i As Integer
i = DCount("*", "クエリ児童別図書貸出簿")

  If i = 0 Then
    MsgBox "対象児童名の貸し出しはありません。"
  Else
   DoCmd.OpenReport "児童別図書貸出簿レポート", acViewPreview
   If MsgBox("印刷しますか?", vbYesNo) = vbYes Then
    DoCmd.Close acReport, "児童別図書貸出簿レポート"
   
    DoCmd.OpenReport "児童別図書貸出簿レポート", acViewNormal
   End If
  End If
 DoCmd.Close acForm, "年月日入力3"

としてはどうでしょうか?

【3321】Re:レポートのデータがないとき
質問  ponpon  - 04/8/24(火) 18:17 -

引用なし
パスワード
   ▼クロ さん:
>Private Sub 児童別貸出簿_Click()
>Dim i As Integer
>DoCmd.OpenForm "年月日入力3"
> If IsNull(Me.tx児童名検索) Then
>   MsgBox "児童名を選択してください", vbCritical
>  Me.tx児童名検索.SetFocus
> Else
><以下省略>
>
>Ifの前で「年月日入力3」を開いてはどうでしょうか?

Ifの前で「年月日入力3」を開いたのですが、結果は同じようです。
同時に二つ「対象児童名の貸し出しはありません」と「年月日入力3」が表示されます。

ちなみに「年月日入力3」のコードを書きますので何か気がついたことはありませんでしょうか。

  テキストボックス開始年月日
  テキストボックス終了年月日
  コマンドボタン閉じる
  コマンドボタンOK

Private Sub Form_Load()
  Me.終了年月日 = Date

End Sub

Private Sub コマンド10_Click()  ’閉じるボタン
 DoCmd.Close
End Sub

Private Sub コマンド9_Click()   ’OKボタン
  If IsNull(Me.開始年月日) Or IsNull(Me.終了年月日) Then
   MsgBox ("開始年月日と終了年月日を入力してください。")
   Me.開始年月日.SetFocus
  ElseIf Me.開始年月日 > Date Or Me.終了年月日 > Date Then
   MsgBox ("有効な年月日をを入力してください。")
   Me.開始年月日.SetFocus

  Else
   Me.Visible = False
 
  End If


End Sub

【3322】Re:レポートのデータがないとき2
回答  クロ  - 04/8/24(火) 18:27 -

引用なし
パスワード
   かぶっちゃったようで...
以下ではどうでしょう?

>cmdボタン児童別貸出簿のクリック時のイベントには
> If IsNull(Me.tx児童名検索) Then
>  MsgBox "児童名を選択してください", vbCritical
>  Me.tx児童名検索.SetFocus
> Else
>  DoCmd.OpenForm "年月日入力3"
> End If
>
>これだけにして
>
>フォーム「年月日入力3」にコマンドボタンを設置して
>クリック時のイベントに

Private Sub コマンド9_Click()   ’OKボタン
Dim i As Integer
  If IsNull(Me.開始年月日) Or IsNull(Me.終了年月日) Then
   MsgBox ("開始年月日と終了年月日を入力してください。")
   Me.開始年月日.SetFocus
  ElseIf Me.開始年月日 > Date Or Me.終了年月日 > Date Then
   MsgBox ("有効な年月日をを入力してください。")
   Me.開始年月日.SetFocus
  Else
  i = DCount("*", "クエリ児童別図書貸出簿")
  If i = 0 Then
   MsgBox "対象児童名の貸し出しはありません。"
  Else
   DoCmd.OpenReport "児童別図書貸出簿レポート", acViewPreview
   If MsgBox("印刷しますか?", vbYesNo) = vbYes Then
    DoCmd.Close acReport, "児童別図書貸出簿レポート"
    DoCmd.OpenReport "児童別図書貸出簿レポート", acViewNormal
   End If
  End If
  DoCmd.Close acForm, "年月日入力3"
 End If

【3323】Re:レポートのデータがないとき2
お礼  ponpon  - 04/8/24(火) 18:33 -

引用なし
パスワード
   ▼クロ さん:
うまくいきました(⌒∇⌒)ノ。
大変ありがとうございました。
ただ、期間を入力する抽出ではForm_年月日入力3のように
Form_年月日入力4・5・6……と必要になってくるような気がして
番号からわかるように「Form_年月日入力3」これは同じフォーム3個目です。
やはり、フォーム「図書貸し出し簿」に年月日入力のテキストボックスを設けた方がいいのかなと思っています。
 面倒なことを大変ありがとうございました。


>cmdボタン児童別貸出簿のクリック時のイベントには
> If IsNull(Me.tx児童名検索) Then
>  MsgBox "児童名を選択してください", vbCritical
>  Me.tx児童名検索.SetFocus
> Else
>  DoCmd.OpenForm "年月日入力3"
> End If
>
>これだけにして
>
>フォーム「年月日入力3」にコマンドボタンを設置して
>クリック時のイベントに
>
>Dim i As Integer
>i = DCount("*", "クエリ児童別図書貸出簿")
>
>  If i = 0 Then
>    MsgBox "対象児童名の貸し出しはありません。"
>  Else
>   DoCmd.OpenReport "児童別図書貸出簿レポート", acViewPreview
>   If MsgBox("印刷しますか?", vbYesNo) = vbYes Then
>    DoCmd.Close acReport, "児童別図書貸出簿レポート"
>   
>    DoCmd.OpenReport "児童別図書貸出簿レポート", acViewNormal
>   End If
>  End If
> DoCmd.Close acForm, "年月日入力3"
>
>としてはどうでしょうか?

【3324】Re:レポートのデータがないとき2
発言  クロ  - 04/8/24(火) 18:38 -

引用なし
パスワード
   図書貸し出し簿にパスワード用テキストボックスを配置して
パスワードを入れると各テキストボックスが使用可になるよ
うな仕様にするのも一案かと...

2237 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078325
(SS)C-BOARD v3.8 is Free