遅刻の「言い訳」選手権

どうもお世話になります。
Accessに関しましての質問でございます。

以下のVBAでコンパイルエラーが出るのですが、
どのように致したらエラーが出なくなるでしょうか?

こちらのプログラムは、
チェックインから宿泊最終日を入力すると
日付を1日ずつ増やして、ほかのデータは
固定したままフォームに入力するプログラムです。

ただし、請求書_詳細IDもオートナンバー型です。
--------------------------------------------

Option Compare Database


Private Sub レコードの追加_Click()
Dim strWHERE As String
Dim D As Date

strWHERE = ""
strWHERE = strWHERE & " AND 宿泊日 >=#" & Me.チェックイン & "#"
strWHERE = strWHERE & " AND 宿泊日 <=#" & Me.宿泊最終日 & "#"
If DCount("*", "Qh2f_請求書_詳細", strWHERE) = 0 Then '条件に当て嵌まるデータ件数を取得

Me.Fh2f_請求書_詳細_sub.Requery

With Me.Fh2f_請求書_詳細_sub.Form.RecordsetClone
For D = Me.チェックイン To Me.宿泊最終日
.FindFirst "宿泊日=#" & D & "#AND 請求書_詳細ID ='" & Me.請求書_詳細ID & "'"
If .NoMatch Then
.AddNew
!宿泊日 = D
!請求書_詳細ID = Me.請求書_詳細ID
!部屋番 = Me.部屋番
!氏名2 = Me.氏名2
!商品名 = Me.商品名
!単価 = Me.単価
!人数 = Me.人数
!宿泊数 = Me.宿泊数
!備考 = Me.備考

.Update
End If
Next
End With

Else

MsgBox ("すでに同じ日付が入っています")
End If
End Sub

--------------------------------------------
こちらの設定にしたところ

「コンパイルエラー」
「メソッドまたはデータメンバが見つかりません。」という
エラーが出てしまいます。

そうして、「.請求書_詳細ID」だけが
ブルーになります。

どうしたら、エラーを消して
連投できるようになるでしょうか?

大変お手数とはぞんじますが、
ご返信お待ち致しております。

【補足】
実は他の方に教えてもらった
プログラムを応用して作ったものです。
VBA初心者です。
どうぞよろしくお願い致します。

A 回答 (5件)

>Private Sub レコードの追加_Click()


のコマンドボタンなどがメインフォーム上にあり
.FindFirst "宿泊日=#" & D & "# AND 請求書_詳細ID =" & Me.請求書_詳細ID
の末尾のMe.請求書_詳細IDがサブフォーム上にあるのでしたら
.FindFirst "宿泊日=#" & D & "# AND 請求書_詳細ID =" & Me!サブフォームコントロール名.Form!請求書_詳細ID
でしょうけど、。。。
http://hatenachips.blog34.fc2.com/blog-entry-347 …
Me.請求書_詳細ID が重複している、
OR コントロール名を間違えている、かも?
Me.請求書_詳細ID は何処にあるのでしょう。?
謎の仕様。
上手く行かなかったらより単純に
.FindFirst "宿泊日=#" & D & "# AND 請求書_詳細ID =1"
でもお試しを。
    • good
    • 0
この回答へのお礼

この度は度重なるご返信をありがとうございます。いろいろ参考にさせていただきましたが、あれこれ試した結果無事できるようになりました。どうもありがとうございます。

お礼日時:2015/03/19 12:59

>請求書_詳細IDもオートナンバー型


であるならば、
>請求書_詳細ID ='" & Me.請求書_詳細ID & "'"
で抽出されるデータは多くて一個しかないということになり、それがなかった場合でも
>!請求書_詳細ID = Me.請求書_詳細ID
繰り返し入れることができなくなるような気がする。

お金に関することなので、状況があまりよくわかっていないので、間違っていてもかまわないという前提の元に話を進めるなら、

・「請求書_親ID」みたいなフィールドを追加し、
セレクト文を
・・・請求書_親ID ='" & Me.請求書_ID & "'"
として、インサートを
.addnew
・・・
!請求書_親ID = Me.請求書_ID
・・・
.update
とする。

インサートするフィールドを眺めていると、テーブルの構造がいまいちな気がして、もう少しRDBについて勉強をしたほうが良いというアドバイスがしたくなるけど、まあ、それは別な話。
    • good
    • 1
この回答へのお礼

丁寧なご回答をありがとうございます。参考にさせていただきました。

お礼日時:2015/03/19 12:51

ANo2は無視してください。


エラーの出ている行を勘違いしました。
スミマセンでした。
    • good
    • 0
この回答へのお礼

度重なるご返答ありがとうございます。なんとかできるようになりたいです。VBAって本当に難しいですね。本を読んでもよく分かりません。この度はどうもありがとうございます。

お礼日時:2015/03/18 15:26

フォームの請求書_詳細IDを入れるテキストボックスの名称が間違っている


可能性がありますので、ご確認ください。 
というか、me.を入れたときに出てくる候補のどれかを選ぶようにすれば、
そのようなことにはならないと思います。
    • good
    • 0
この回答へのお礼

丁寧なご返信ありがとうございます。

無視とのことですが、一応返信をさせてください。
meの候補には出て参りません。

別の候補はたくさん出てくるのですが・・・
請求書IDとか。ただ、これは親のIDなので関係ないかと思います。
どうでしょうか?

再び話は戻りまして、請求書_詳細IDですが
サブフォーム(出力用)にはテキストボックスはあります。
そのかわり、入力用のテキストボックスはありません。

どうでしょうか? よくわからなくてどうもすみません。

後、外せない理由があって、
請求書IDはオートメーション型ではありません。
数値型になっております。こちらは関係あるでしょうか?

お礼日時:2015/03/18 15:25

ただし、請求書_詳細IDもオートナンバー型です。


なので、どの行でエラーなのか不明ですが、とりあえず、
.FindFirst "宿泊日=#" & D & "#AND 請求書_詳細ID ='" & Me.請求書_詳細ID & "'"

.FindFirst "宿泊日=#" & D & "# AND 請求書_詳細ID =" & Me.請求書_詳細ID
です。
数値型の場合はシングルクォートで囲みません。
文字列型の場合には必要になります。
かな?
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。

またわかりやすい解説をありがとうございます。
ただ、修正しましたが、やはり同じ個所にエラーが出てしまいます。
どうしたらよいでしょうか?

.FindFirst "宿泊日=#" & D & "# AND 請求書_詳細ID =" & Me.請求書_詳細ID

の一番末尾の「.請求書_詳細ID」がエラーとなります。

ご指南いただけましたら幸いでございます。

お礼日時:2015/03/18 15:14

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

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

関連するカテゴリからQ&Aを探す


おすすめ情報

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