- ベストアンサー
社員の勤務先の履歴を更新する際の問題と改善点
- 社員の勤務先の履歴を更新する際に、現勤務先の開始日と前勤務先の終了日の入力順序によって、終了日が誤った値となってしまう問題があります。
- 現勤務先の開始日を入力した場合、前勤務先の終了日はその一日前に自動的に設定されるように改善したいです。
- 終了日を入力せずにレコードを削除する場合、開始日だけが残ってしまう問題があります。この点を改善したいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ご提示の質問の回答者(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 ・・・以上です。
お礼
DexMachinaさんありがとうございます!! 前勤務先と現勤務先の情報が別レコードなので、教えていただいたように変更すると現勤務先の終了日をもとに現勤務先の開始日が代入されます。 説明不足で申し訳ありません! 宜しくお願いします!
補足
前勤務先終了日の更新後イベント等で進めると 同じレコード内で開始日と終了日が反映し合うので 前の方法で進めてdefaultvalueをvalueに変えてみました。 その常態で終了日に値を入力すると以下のエラーになります。 2113:このフィールドに入力した値が不正です。 宜しくお願いします!