Access VBA質問箱 IV

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

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


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

【9726】findfirstの使い方 メイ子 07/8/2(木) 12:45 質問[未読]
【9727】Re:findfirstの使い方 ちょっちネ 07/8/2(木) 17:10 発言[未読]
【9731】Re:findfirstの使い方 メイ子 07/8/3(金) 18:46 質問[未読]
【9735】Re:findfirstの使い方 hatena 07/8/4(土) 3:15 回答[未読]
【9737】Re:findfirstの使い方 メイ子 07/8/4(土) 20:26 お礼[未読]

【9726】findfirstの使い方
質問  メイ子  - 07/8/2(木) 12:45 -

引用なし
パスワード
   こんにちは、メイ子と申します。
「休日一覧基本」というテーブルがあって、日付フィールドには1年の祝日が入力されています。その月と日を取得して、来年の祝日データを「休日一覧」というテーブルに追加していきたいのです。
来年は5月4日が日曜日と重なるので、5月6日が振替休日になるということも含めて、下記のようなコードを作成いたしました。
RS.FindFirst (5月4日のところ)を通った後、「休日一覧基本」の1つめのデータに戻ってしまい、そのまま無限ループ状態になります。
どこを直したらよろしいでしょうか?どなたかご教示お願いいたします。


Private Sub 更新_Click()
  Dim shukujitsu As Date
  Dim db As DAO.Database
  Dim RS As DAO.Recordset
  Dim RS2 As DAO.Recordset
  Dim strSQL As String
    strSQL = "SELECT * FROM 休日一覧基本 "
    Set db = CurrentDb()
    Set RS = db.OpenRecordset(strSQL, dbOpenDynaset)
    Set RS2 = db.OpenRecordset("休日一覧", dbOpenTable)

  Do Until RS.EOF
    shukujitsu = RS!休日
    RS2.AddNew
    If Weekday(Year(Date) + 1 & "/" & Month(shukujitsu) & "/" & _
      Day(shukujitsu)) <> 1 Then
      RS2!休日 = Year(Date) + 1 & "/" & Month(shukujitsu) & _
      "/" & Day(shukujitsu)
    Else
      RS.FindFirst "休日= #" & DateSerial(Year(Date) + 1, _
      Month(shukujitsu), Day(shukujitsu)) + 1 & "#"
      If RS.NoMatch Then
        RS2!休日 = DateSerial(Year(Date) + 1, Month(shukujitsu),_
        Day(shukujitsu)) + 1
      Else
        RS2!休日 = DateSerial(Year(Date) + 1, Month(shukujitsu),_
        Day(shukujitsu)) + 2
      End If
    End If
    RS2.Update
    RS.MoveNext
  Loop

  RS.Close
  RS2.Close
  Set RS = Nothing
  Set RS2 = Nothing

End Sub

【9727】Re:findfirstの使い方
発言  ちょっちネ  - 07/8/2(木) 17:10 -

引用なし
パスワード
   ▼メイ子 さん:

スレタイの通りFindFirstで戻ってるのですから、それを止めれば
とりあえず、無限ループは回避できるかと。

DlookUpで代用すると良いかと思います。


祝祭日データは手入力の方が手っ取り早いかと。

振替休日を含めても年間20日程度ですし、
第〇月曜だとか、振替規則だとかをコードに組み込むと
かなり大変だと思います。
(法改正とかあれば、コードの修正も。。。。)

15日程度だったら、年1回、10分もあれば出来ますし、
(数年分入力できるのであれば、数年に1回)
コード化するより断然簡単かと。。。。

VBAの勉強の為でしたら話は別ですけど。。。。。
その場合は、5月3日が日曜日の場合も考えてみると良いかと思います。


無駄レス失礼しました。

【9731】Re:findfirstの使い方
質問  メイ子  - 07/8/3(金) 18:46 -

引用なし
パスワード
   ▼ちょっちネ さん ご教示ありがとうございます。

>スレタイの通りFindFirstで戻ってるのですから、それを止めれば
>とりあえず、無限ループは回避できるかと。

そうですね、FindFirstだと最初に戻ることになるのですね。

>DlookUpで代用すると良いかと思います。

はい、DlookUpで代用したら、無限ループはなくなりましたが、
    ElseIf DLookup("休日", "休日一覧基本", "休日= #" & _
        DateSerial(Year(Date) + 1, Month(shukujitsu), _
        Day(shukujitsu)) + 1 & "#") <> Null Then

5月4日のところで、参照元テーブルに5月5日があるかどうかを検索する形には
なりましたが、5月5日があるはずなのに、nullを返してきます。
どこを直したらよいでしょうか?


>祝祭日データは手入力の方が手っ取り早いかと。

外部ユーザーが全くのパソコン初心者であることを想定してコード作成しております。自分が使う分には手入力で済ませますが・・。

>その場合は、5月3日が日曜日の場合も考えてみると良いかと思います。

そうですね、まだいろいろなパターンがあって複雑なコードになりそうです。

【9735】Re:findfirstの使い方
回答  hatena  - 07/8/4(土) 3:15 -

引用なし
パスワード
   >>その場合は、5月3日が日曜日の場合も考えてみると良いかと思います。
>
>そうですね、まだいろいろなパターンがあって複雑なコードになりそうです。

すべてコードでやるとかなり複雑なコードになりますね。

私は下記に公開されてる関数を利用させてもらってます。

www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm

【9737】Re:findfirstの使い方
お礼  メイ子  - 07/8/4(土) 20:26 -

引用なし
パスワード
   ▼hatena さん、アドバイスありがとうございます。

>私は下記に公開されてる関数を利用させてもらってます。
>
>www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm

はい、実は上記サイトは「お気に入り」に登録済みですが、
難しくて私の手には負えないと思っておりました。
でも、質問箱の方々のアドバイスであれば、
一度解読に取り組んでみたいと思います。
またわからないことがあったら、よろしくお願いいたします。

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