- - PR -
ACCESSでコントロールソースでの関数の使用について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-04-17 20:49
いつもお世話になっています、かあどきゃぷたーと申します。
皆様のお知恵を拝借したく、投稿いたします。 現在の派遣先で、社員データ管理をACCESSにて行っていて、 それに若干手を加えてほしいとのことで作業しているのですが、 うまく動作せず困っております。 それは、社員の勤続年月を求めて、フォームで表示させたいとのことで、 HPを参考にして、モジュールにて関数を作成し、 テキストのコントロールソースで 関数を引数として入社年月日とnow()を与えて呼び出し、 表示させることはできたのですが、 退職者の場合には、在職期間を表示させるようにと言われました。 関数を呼び出す際に、引数として入社年月日とnow()と退職年月日を与えて 関数側で、判断させて処理させようとしましたが、 退職年月日が入っていないと、関数を呼び出す段階でエラーになってしまいます。 (関数側ではdate型で定義しています) テキストのコントロールソースで 退職年月日が入っていれば、引数として入社年月日と退職年月日、 そうでなければ、引数として入社年月日とnow()を渡すように、 判定をさせて呼び出そうとしましたがうまくいきませんでした。 参考先のソースは、 http://www.accessclub.jp/bbs/0044/beginers17974.html で、一部修正して使用しています。 皆様よろしくお願いいたします。 | ||||
|
投稿日時: 2007-04-17 21:03
じゃあ君しかソースわかんないね。 この状況でどうやって答えろというの? | ||||
|
投稿日時: 2007-04-17 21:09
失礼しました。参考して修正したソースは以下になります。
1月未満については切り捨てになるので、その部分だけ修正して使わせております。 '配属年月から年数を求める Public Function NenGet(date1 As Date, date2 As Date) As Long Dim tuki As Long '経過月数合計の計算 If Day(date1) < Day(date2) Then tuki = DateDiff("m", date1, date2) Else tuki = DateDiff("m", date1, date2) - 1 End If '経過年数の計算 NenGet = Int((tuki) / 12) End Function '配属年月から月数を求める Public Function TukiGet(date1 As Date, date2 As Date) As Long '経過月数の計算 If Day(date1) < Day(date2) Then TukiGet = (DateDiff("m", date1, date2)) Mod 12 Else TukiGet = (DateDiff("m", date1, date2) - 1) Mod 12 End If End Function | ||||
|
投稿日時: 2007-04-17 22:26
この文章通りだと思えるのですが・・・。退職年月日が入っていると成功し、 入っていないと失敗するということですから。 入っていないので値がないのですが、Date型で値なしってOKでしたっけ? | ||||
|
投稿日時: 2007-04-17 23:32
Ahfさん、ありがとうございます。
テストとして、関数側に引数(退職年月日)を追加しただけで、 ロジックには手を加えていない状態で試したのですが、 表示はエラー表示になってしまいます。 引数でdate型で値なしでというかNULLを渡せないということだと思うのですが… 実際にAccessで組むのは初めてで、勝手が違うので困っています。 | ||||
|
投稿日時: 2007-04-18 12:03
関数に渡す前にNULLチェックをしてはいかがでしょう。
フォームのテキストボックスのコントロールソースに以下のようにして。 =NenGet([入社日],IIf([退職日] Is Null,Now(),[退職日])) | ||||
|
投稿日時: 2007-04-19 12:05
crabさん、ありがとうございます。
教えていただいた方法でうまくいきました。ありがとうございました。 勤続年数の場合は概算でかまわないのですが、 退社した場合の在職期間は、現在のロジックだと たとえば、入社が2000/04/01、退社が2002/03/31だと ちょうど2年となるはずが、1年11ヶ月となってしまいます。 たとえば、入社が2000/04/01、退社が2002/04/01だと2年になるのですが。 このあたりは、ロジックを作成しなおさなければならないのですが、 それについては、勉強しながら何とか実現させたいと思っています。 | ||||
|
投稿日時: 2007-04-19 12:50
日数計算で両端にしたければ日付項目に+1してから計算するのが普通だろうと思います(本当の「日数」だと計算結果に+1したりもしますが・・)。
|