- PR -

ACCESSでコントロールソースでの関数の使用について

投稿者投稿内容
かあどきゃぷたー
ベテラン
会議室デビュー日: 2006/06/27
投稿数: 62
お住まい・勤務地: 東京都、ちょっとお隣がすぐ千葉県のところ
投稿日時: 2007-04-17 20:49
いつもお世話になっています、かあどきゃぷたーと申します。

皆様のお知恵を拝借したく、投稿いたします。

現在の派遣先で、社員データ管理をACCESSにて行っていて、
それに若干手を加えてほしいとのことで作業しているのですが、
うまく動作せず困っております。

それは、社員の勤続年月を求めて、フォームで表示させたいとのことで、
HPを参考にして、モジュールにて関数を作成し、
テキストのコントロールソースで
関数を引数として入社年月日とnow()を与えて呼び出し、
表示させることはできたのですが、
退職者の場合には、在職期間を表示させるようにと言われました。

関数を呼び出す際に、引数として入社年月日とnow()と退職年月日を与えて
関数側で、判断させて処理させようとしましたが、
退職年月日が入っていないと、関数を呼び出す段階でエラーになってしまいます。
(関数側ではdate型で定義しています)

テキストのコントロールソースで
退職年月日が入っていれば、引数として入社年月日と退職年月日、
そうでなければ、引数として入社年月日とnow()を渡すように、
判定をさせて呼び出そうとしましたがうまくいきませんでした。

参考先のソースは、
http://www.accessclub.jp/bbs/0044/beginers17974.html
で、一部修正して使用しています。

皆様よろしくお願いいたします。

ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-04-17 21:03
引用:

かあどきゃぷたーさんの書き込み (2007-04-17 20:49) より:
参考先のソースは、
http://www.accessclub.jp/bbs/0044/beginers17974.html
で、一部修正して使用しています。


じゃあ君しかソースわかんないね。
この状況でどうやって答えろというの?
かあどきゃぷたー
ベテラン
会議室デビュー日: 2006/06/27
投稿数: 62
お住まい・勤務地: 東京都、ちょっとお隣がすぐ千葉県のところ
投稿日時: 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
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2007-04-17 22:26
引用:
かあどきゃぷたーさんの書き込み(2007-04-17 20:49)より:
退職年月日が入っていないと、関数を呼び出す段階でエラーになってしまいます。



この文章通りだと思えるのですが・・・。退職年月日が入っていると成功し、
入っていないと失敗するということですから。

入っていないので値がないのですが、Date型で値なしってOKでしたっけ?
かあどきゃぷたー
ベテラン
会議室デビュー日: 2006/06/27
投稿数: 62
お住まい・勤務地: 東京都、ちょっとお隣がすぐ千葉県のところ
投稿日時: 2007-04-17 23:32
Ahfさん、ありがとうございます。

テストとして、関数側に引数(退職年月日)を追加しただけで、
ロジックには手を加えていない状態で試したのですが、
表示はエラー表示になってしまいます。

引数でdate型で値なしでというかNULLを渡せないということだと思うのですが…

実際にAccessで組むのは初めてで、勝手が違うので困っています。
crab
会議室デビュー日: 2006/12/25
投稿数: 11
投稿日時: 2007-04-18 12:03
関数に渡す前にNULLチェックをしてはいかがでしょう。
フォームのテキストボックスのコントロールソースに以下のようにして。

=NenGet([入社日],IIf([退職日] Is Null,Now(),[退職日]))


かあどきゃぷたー
ベテラン
会議室デビュー日: 2006/06/27
投稿数: 62
お住まい・勤務地: 東京都、ちょっとお隣がすぐ千葉県のところ
投稿日時: 2007-04-19 12:05
crabさん、ありがとうございます。
教えていただいた方法でうまくいきました。ありがとうございました。

勤続年数の場合は概算でかまわないのですが、

退社した場合の在職期間は、現在のロジックだと
たとえば、入社が2000/04/01、退社が2002/03/31だと
ちょうど2年となるはずが、1年11ヶ月となってしまいます。
たとえば、入社が2000/04/01、退社が2002/04/01だと2年になるのですが。

このあたりは、ロジックを作成しなおさなければならないのですが、
それについては、勉強しながら何とか実現させたいと思っています。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-04-19 12:50
日数計算で両端にしたければ日付項目に+1してから計算するのが普通だろうと思います(本当の「日数」だと計算結果に+1したりもしますが・・)。

スキルアップ/キャリアアップ(JOB@IT)