Access VBA質問箱 IV

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

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


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

【8672】コマンドボタンのクリック時 モジュール?? 06/10/13(金) 10:30 質問[未読]
【8673】Re:コマンドボタンのクリック時 まさ7251 06/10/13(金) 12:09 発言[未読]
【8674】Re:コマンドボタンのクリック時 モジュール?? 06/10/13(金) 14:22 発言[未読]
【8676】Re:コマンドボタンのクリック時 まさ7251 06/10/13(金) 16:22 発言[未読]
【8677】Re:コマンドボタンのクリック時 モジュール?? 06/10/13(金) 16:37 発言[未読]
【8678】Re:コマンドボタンのクリック時 まさ7251 06/10/13(金) 16:55 発言[未読]
【8679】Re:コマンドボタンのクリック時 モジュール?? 06/10/16(月) 10:50 発言[未読]
【8680】Re:コマンドボタンのクリック時 まさ7251 06/10/16(月) 11:09 発言[未読]
【8687】Re:コマンドボタンのクリック時 モジュール?? 06/10/16(月) 14:16 発言[未読]
【8688】Re:コマンドボタンのクリック時 まさ7251 06/10/16(月) 15:31 発言[未読]
【8689】Re:コマンドボタンのクリック時 モジュール?? 06/10/16(月) 16:26 発言[未読]
【8690】Re:コマンドボタンのクリック時 まさ7251 06/10/16(月) 16:44 発言[未読]
【8691】Re:コマンドボタンのクリック時 モジュール?? 06/10/16(月) 17:28 お礼[未読]

【8672】コマンドボタンのクリック時
質問  モジュール??  - 06/10/13(金) 10:30 -

引用なし
パスワード
   教えてください。
フォームのコマンドボタンのクリック時に残高を更新するモジュールを作成しました。
何回かのデバックの末、”このコレクションには項目がありません”と出てきました。
全く基本的なことなのだろうと思いますが、モジュール自体が見よう見まねで作成しているため意味がわかりません。
こんな表現の仕方でわかるでしょうか?
宜しくお願いします。

【8673】Re:コマンドボタンのクリック時
発言  まさ7251  - 06/10/13(金) 12:09 -

引用なし
パスワード
   >フォームのコマンドボタンのクリック時に残高を更新するモジュールを作成しました。
>何回かのデバックの末、”このコレクションには項目がありません”と出てきました。
>全く基本的なことなのだろうと思いますが、モジュール自体が見よう見まねで作成しているため意味がわかりません。
>こんな表現の仕方でわかるでしょうか?

イメージはわかりますけど、これだけでは、
”エラーとなるコレクションに、指定した項目がないのでは。”
というような、抽象的な返答しか付けようがないですよ。

具体的なアドバイスが必要なら、
どのようなコードを書いているのかを提示してください。
関連するフォーム、テーブルの情報もあわせて。

【8674】Re:コマンドボタンのクリック時
発言  モジュール??  - 06/10/13(金) 14:22 -

引用なし
パスワード
   ▼まさ7251 さん:
返信、ありがとうございます。
何をどう書いていいかわからず、中途半端な質問になってしまいました。

次のような状態です。

テーブル
 顧客マスター    顧客No、顧客名、締日、請求金額
 買掛残高      顧客No、締日、残高
 売上入金マスター  日付、顧客No、売上金額、入金金額

クエリ
 残高更新該当顧客1

SELECT 売上入金マスター.顧客No, Min(顧客マスター.請求金額) AS 請求金額の合計, Sum(売上入金マスター.売上金額) AS 売上金額の合計, Sum(売上入金マスター.入金金額) AS 入金金額の合計, [請求金額の合計]+[売上金額の合計]-[入金金額の合計] AS 当月残高
FROM 売上入金マスター INNER JOIN 顧客マスター ON 売上入金マスター.顧客No = 顧客マスター.顧客No
WHERE (((売上入金マスター.日付)>=[開始日] And (売上入金マスター.日付)<=[終了日]))
GROUP BY 売上入金マスター.顧客No, 顧客マスター.締め日
HAVING (((顧客マスター.締め日)=[締日]));


フォーム
 年、月、日(締日)
 開始日、終了日
 締日該当期間のコマンドボタン
 該当顧客のコマンドボタン


フォームの締日を指定して(年、月、日)「締日該当期間」をクリックすると、指定範囲が開始日と終了日に表示されるようになっています。指定範囲が表示された後「該当顧客」のコマンドボタンでクエリ「残高更新該当顧客1」の結果をテーブル「買掛残高」に保存し、それの残高をテーブル「顧客マスター:請求残高」へ更新するということをしたいと思います。できればフォームのコマンドボタン1つで「顧客マスター:請求金額」を更新させたいのですが、難しいため2つに分ければできるのではないかと思い2つに分けたのですが、やはりそれも難しいようで・・・

コードは次の通りです。
Option Compare Database
Option Explicit
Option Base 1
Dim dbs As Database
Dim qdf, qdf2 As QueryDef
Dim rst1, rst2, rst3 As Recordset
Dim 顧客数 As Integer
Private Sub Form_Load()
  Set dbs = CurrentDb
  Me![年] = Year(Now())
  Me![月] = Month(Now())
End Sub

Private Sub 締日該当期間_click()
On Error GoTo Err_締日該当期間
 
 
  Dim 開始月日, 終了月日 As String
  Dim 締日, 開始月, 開始年, 終了月, 終了年 As String
  Dim i As Integer
  Dim strData, strSumi As String

  ' [売上日]を[締め日]の期間で絞り込む
  締日 = Me![日]
  開始年 = Me![年]
  開始月 = Me![月]
  終了年 = Me![年]
  終了月 = Me![月]
 
  If 締日 = "月末" Then          ' 締め日が月末
   締日 = "1"
   
   Select Case 開始月
     Case "12"             ' 12月の場合
      ' 終了年を1年プラスする
      終了年 = CStr(Val(終了年) + 1)
      終了月 = "1"
 
     Case Else             ' 12月以外の場合
      ' 終了月を1月プラスする
      終了月 = CStr(Val(終了月) + 1)
      
   End Select
 
  Else                  ' 締め日が月末以外
   ' 締日を1プラスする
   締日 = CStr(Val(締日) + 1)
 
   Select Case 開始月
     Case "1"             ' 1月の場合
      ' 開始年を1年マイナスする
      開始年 = CStr(Val(開始年) - 1)
      開始月 = "12"
 
     Case Else             ' 1月以外の場合
      ' 開始月を1月マイナスする
      開始月 = CStr(Val(開始月) - 1)
      
   End Select
  End If

  開始月日 = 開始年 & "/" & 開始月 & "/" & 締日
  終了月日 = 終了年 & "/" & 終了月 & "/" & 締日
  Me![開始日] = DateValue(開始月日)
  Me![終了日] = DateValue(終了月日) - 1


Err_締日該当期間:
  If Err = 3021 Then
   Beep
   MsgBox "この締め日の顧客はありますが、作業はしていません。", 16
   Exit Sub
 
  End If

End Sub
Private Sub 該当顧客_click()
On Error GoTo Err_該当顧客_Click

 Dim recMax As Long
 Dim i As Integer
 
  Set qdf = dbs.QueryDefs("請求書 残高更新該当顧客1")
  qdf.Parameters("開始日") = Me![開始日]
  qdf.Parameters("終了日") = Me![終了日]
  qdf.Parameters("締日") = Me![日]
  Set rst1 = qdf.OpenRecordset()
  rst1.MoveLast
  recMax = rst1.RecordCount
  rst1.MoveFirst
 
 '「買掛残高」テーブルをオープンする
 Set rst2 = dbs.OpenRecordset("買掛残高")
 
 '買掛残高の数だけ「買掛残高」テーブルにレコードを保存する
 For i = 1 To recMax
   With rst2
   .AddNew
   ![顧客No] = rst1.[顧客No]
   ![締日] = rst1.[終了日]
   ![残高] = rst1.[当月残高]
   .Update
  End With
  
  Call 当月残高保存(rst1.[顧客No], rst1.[当月残高])
  
  rst1.MoveNext
  
 Next i
 rst1.Close
 rst2.Close
 qdf.Close
  

Exit_該当顧客_Click:
  Exit Sub

Err_該当顧客_Click:
  MsgBox Err.Description
  Resume Exit_該当顧客_Click
  
End Sub

Private Sub 当月残高保存(顧客No, 当月残高)

  '「請求書 顧客抽出」クエリーをオープンする
  Set qdf2 = dbs.QueryDefs("請求書 顧客抽出")
  qdf2.Parameters("検査値1") = 顧客No
  Set rst3 = qdf.OpenRecordset()
 
  rst3.Edit
  rst3.[請求金額] = 残高
  rst3.Update
  rst3.ciose
  qdf2.Close
 
End Sub

以上です。宜しくお願いします。

【8676】Re:コマンドボタンのクリック時
発言  まさ7251  - 06/10/13(金) 16:22 -

引用なし
パスワード
   ▼モジュール?? さん:
>▼まさ7251 さん:
>返信、ありがとうございます。
>何をどう書いていいかわからず、中途半端な質問になってしまいました。

あと、どこでエラーになるのかもご提示ください。
On Error ・・・はコメントにして下さい。
そうしないと、どこがエラーなのか判りませんので。

【8677】Re:コマンドボタンのクリック時
発言  モジュール??  - 06/10/13(金) 16:37 -

引用なし
パスワード
   ▼まさ7251 さん:
>
>あと、どこでエラーになるのかもご提示ください。
>On Error ・・・はコメントにして下さい。
>そうしないと、どこがエラーなのか判りませんので。

エラーではなくコマンドボタンをクリックすると
”このコレクションには項目がありません””OK"があるだけです。
何もアクションが起こらないということです。
エラーという表示はありません。デバックとかヘルプが出ればわかるのでしょうが・・・
やはり、これではわからないでしょうか?m(_)m

【8678】Re:コマンドボタンのクリック時
発言  まさ7251  - 06/10/13(金) 16:55 -

引用なし
パスワード
   >>あと、どこでエラーになるのかもご提示ください。
>>On Error ・・・はコメントにして下さい。
>>そうしないと、どこがエラーなのか判りませんので。
>
>エラーではなくコマンドボタンをクリックすると
>”このコレクションには項目がありません””OK"があるだけです。
>何もアクションが起こらないということです。
>エラーという表示はありません。デバックとかヘルプが出ればわかるのでしょうが・・・

On Error ・・・ (最低でも2個所)を
コメントにしても、そのような状態なのですか?

あと、どのコマンドボタンを押した場合ですか。

【8679】Re:コマンドボタンのクリック時
発言  モジュール??  - 06/10/16(月) 10:50 -

引用なし
パスワード
   ▼まさ7251 さん:

「On Error・・・はコメントにして下さい」を理解していませんでした。
コメントにするということがわかっていません。

今、コードの中にある On Error・・・をコメント?にするのでしょうか?

押したコマンドボタンは、”該当顧客”です。

宜しくお願いします。

【8680】Re:コマンドボタンのクリック時
発言  まさ7251  - 06/10/16(月) 11:09 -

引用なし
パスワード
   >「On Error・・・はコメントにして下さい」を理解していませんでした。
>コメントにするということがわかっていません。
>
>今、コードの中にある On Error・・・をコメント?にするのでしょうか?

On Error・・・
を以下のように修正してください。
'On Error・・・
あるいは
Rem On Error・・・

また、モジュールをどこかから流用するのは良いのですが、
流用した部分の意味は調べて自分で理解した方が良いですよ。

上記の On Error も、
ヘルプで意味を調べてください。

【8687】Re:コマンドボタンのクリック時
発言  モジュール??  - 06/10/16(月) 14:16 -

引用なし
パスワード
   ▼まさ7251 さん:
>上記の On Error も、
>ヘルプで意味を調べてください。

ありがとうございます。

エラーが出ました。
Private Sub_該当顧客の
買掛残高テーブルへ保存するところの
![締日]=rst1.[終了日]
で黄色の線がつきました。

クエリ 残高更新該当顧客1 日付の抽出条件で
>=[開始日] And <=[終了日] としているため
rst1.[終了日] では駄目ということでしょうか?

宜しくお願いします。

【8688】Re:コマンドボタンのクリック時
発言  まさ7251  - 06/10/16(月) 15:31 -

引用なし
パスワード
   >エラーが出ました。
>Private Sub_該当顧客の
>買掛残高テーブルへ保存するところの
>![締日]=rst1.[終了日]
>で黄色の線がつきました。

rst1 に 終了日がないからですね。

>クエリ 残高更新該当顧客1 日付の抽出条件で
>>=[開始日] And <=[終了日] としているため
>rst1.[終了日] では駄目ということでしょうか?

言われている意味がよくわかりませんが、
Me![終了日] ではダメなのですか。

【8689】Re:コマンドボタンのクリック時
発言  モジュール??  - 06/10/16(月) 16:26 -

引用なし
パスワード
   ▼まさ7251 さん:
>
>言われている意味がよくわかりませんが、
>Me![終了日] ではダメなのですか。

ありがとうございます。

Me![終了日]で回避できました。
次に、当月残高保存で rst3![請求金額]=残高 で
残高が黄色い線になったので、当月残高に直し、また、rst3![請求金額]が
黄色い線になったので Me!に直しました。
今度は、rst3.Edit が
実行時エラー
データベースまたはオブジェクトは読み取り専用なので更新できませんと出ました。
いくつかを直したことによって、
テーブル 買掛残高には、複数件あるうちの1件だけが保存されていましたが、
テーブル 顧客マスターの請求金額は更新されていませんでした。

【8690】Re:コマンドボタンのクリック時
発言  まさ7251  - 06/10/16(月) 16:44 -

引用なし
パスワード
   >次に、当月残高保存で rst3![請求金額]=残高 で
>残高が黄色い線になったので、当月残高に直し、また、rst3![請求金額]が
>黄色い線になったので Me!に直しました。
>今度は、rst3.Edit が
>実行時エラー
>データベースまたはオブジェクトは読み取り専用なので更新できませんと出ました。
>いくつかを直したことによって、
>テーブル 買掛残高には、複数件あるうちの1件だけが保存されていましたが、
>テーブル 顧客マスターの請求金額は更新されていませんでした。

直すところをきちんと理解された上で直しているのですか。
rst3![請求金額] これを Me! に直すと言うことは
何を意味しているのかは理解できていますか。
レコードセットに代入していたのをフォームにしてしまうと、
保存されないのは同然かと思います。

色々直したとのことですが、結局、どのようなコードになって、
どのような結果になって、何が問題なのかを整理されてはどうでしょうか。
断片的に直した箇所を言われても、そこから状況を把握するのは困難です。

【8691】Re:コマンドボタンのクリック時
お礼  モジュール??  - 06/10/16(月) 17:28 -

引用なし
パスワード
   ▼まさ7251 さん:

色々なご指摘ありがとうございます。
理解できていないまま直しています。

なんとなくこうかな?って思いながらやっているので・・・
コードをもっと理解できる用にならないとってことですよね。

不勉強な私にお付き合いいただきありがとうございました。
コードを理解し、整理してみた上でわかないことがあれば
また、質問させていただきます。
ありがとうございました。

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