こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

http://oshiete.goo.ne.jp/qa/5843834

http://okwave.jp/qa/q5843834.htmlと同じアクセスの質問です。
現在、開始日や所属コードを入力すると終了日に自動的に”9999/12/31”と入力されるようになっています。その為、社員の勤務先の履歴を更新する時に、前勤務先の終了日を入力する前に現勤務先の所属コードや開始日を入力してしまうと、終了日が”9999/12/31”となります。

一つ目の変更したい点は、上記の後に前勤務先の終了日を入力しても、現勤務先の開始日に反映するようにしたいです。

二つ目は、現勤務先の開始日を入力したら、前勤務先の終了日がその一日前になるようにしたいです。

三つ目は、レコードを削除する時に、終了日から反映させた開始日だけが削除できずに残ってしまうのでそこを変更したいです。

情報不足かと思いますが、宜しくお願いします!!

投稿日時 - 2010-07-14 17:49:08

QNo.6038188

困ってます

質問者が選んだベストアンサー

ご提示の質問の回答者(No.2)です。

上記の際は「次のレコード」とのことでしたが、今回のご質問は「現在のレコード」に
対しての操作、ということのように読めますので、以下、その前提で回答します。
(・・・前勤務先と現勤務先の情報が別レコード、ということではないことを祈ります(汗))

現レコードへの操作や入力済みの値の上書きとなると、既定値では対応できません
ので、値を直接代入してやることになります。
※「三つ目」の現象は、恐らく前回の回答を元に設定された『既定値』が表示された
  ままになっていることを指していると思いますので、対応手段を『既定値(Default
  Value)』から『値(Value)』に変更することで、自然に解消されます。
 (念のため、開始日/終了日のプロパティシートの『データ』タブで既定値の設定を
  確認し、値が残っているようなら削除してください)


「一つ目」と「二つ目」のご要望を単純に実現するなら、コードは以下の通りです:

'「前勤務先終了日」テキストボックスの更新後イベント
Private Sub 前勤務先終了日_AfterUpdate()

  '値を削除した場合は、何もしない  
  If IsNull(前勤務先終了日) Then Exit Sub

  'DateAdd関数を使用して、終了日の1日後を開始日に設定
  '(上の説明にあわせるなら「~開始日.Value」ですが、「.Value」は省略可なので略)
  現勤務先開始日 = DateAdd("d", 1, 前勤務先終了日)

End Sub

'「現勤務先開始日」テキストボックスの更新後イベント
Private Sub 現勤務先開始日_AfterUpdate

  If IsNull(現勤務先開始日) Then Exit Sub

  前勤務先終了日 = DateAdd("d", -1, 現勤務先開始日)

End Sub


但し、これだと、もしも「前勤務先終了日」と「現勤務先開始日」の間に空白期間のある
人がいた場合、入力のしようがなくなってしまいます。

「空白期間は前勤務先の勤務期間に含める」といった運用ルールを置かれているか、
空白期間がありえない前提なら問題ありませんが、そうでないなら、以下のように
「代入先が入力済みの場合は、上書きしてよいか確認する」といった方法もあります。

「前勤務先終了日の入力時は確認なしで上書き、現勤務先開始日の入力時は必要に
に応じて確認」でよいなら、「現勤務先開始日」のコードを以下のものに差し替えます:

Private Sub 現勤務先開始日_AfterUpdate
On Error Goto エラー処理

  '定数の宣言
  Const strMsg As String = "前勤務先終了日は入力済みです。" _
    & vbCrLf & "入力した開始日の前日で上書きしますか?"

  If IsNull(現勤務先開始日) Then
    '現勤務先開始日が空白の場合は、何もしない
    Goto 終了処理
  ElseIf IsNull(前勤務先終了日) Then
    '前勤務先終了日が空白の場合は、そのまま処理を継続
  ElseIf MsgBox(strMsg, vbYesNo, "確認") = vbNo Then
    '終了日の上書き確認で「いいえ」選択時は何もしない
    '(「はい」選択時は、そのまま処理を継続)
    Goto 終了処理
  End If

  '上で「終了処理」に飛ばされていなければ、終了日への代入を実行
  前勤務先終了日 = DateAdd("d", -1, 現勤務先開始日)

終了処理:
  Exit Sub

エラー処理:
  MsgBox Err.Number & ":" & Err.Description, , Me.Name & " 現勤務先開始日"
  Resume 終了処理

End Sub


・・・以上です。

投稿日時 - 2010-07-17 11:30:21

補足

前勤務先終了日の更新後イベント等で進めると
同じレコード内で開始日と終了日が反映し合うので
前の方法で進めてdefaultvalueをvalueに変えてみました。

その常態で終了日に値を入力すると以下のエラーになります。
2113:このフィールドに入力した値が不正です。

宜しくお願いします!

投稿日時 - 2010-07-29 17:50:43

お礼

DexMachinaさんありがとうございます!!

前勤務先と現勤務先の情報が別レコードなので、教えていただいたように変更すると現勤務先の終了日をもとに現勤務先の開始日が代入されます。

説明不足で申し訳ありません!

宜しくお願いします!

投稿日時 - 2010-07-20 16:20:07

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問