
諸賢者の皆様、よろしくお願いいたします。
【環境】
OS:WindowsXP
ソフトウエア:ACCESS2003
【やりたいことの概要】
お客様より作業依頼を受領し、作業種別に応じて予め設定された作業期限を関数により求め、所定フィールドに設定したい。
【前提】
(1)テーブル「納品期限管理テーブル」
フィールド(1):プライマリーID(長整数型、固有値)
フィールド(2):作業番号(長整数型、固有値)
フィールド(3):受領日(日付型 書式は「yy/mm/dd hh:nn AM/PM」に設定)
フィールド(4):納品期限(テキスト型)
(2)関数
モジュールに次の関数を作成。
Function 納品期限(作業番号 As Integer, 受領日 As Date, 受領時間 As Date) As Variant
Dim date_received As Date '受領日
Dim time_received As Date '受領時
date_received = DateSerial(Year(受領日), Month(受領日), Day(受領日))
time_received = TimeSerial(Hour(受領時間), Minute(受領時間), Second(受領時間))
Select Case 作業番号
Case 101: '当日17時30分までの納品
納品期限 = date_received + TimeSerial(17, 30, 0)
Exit Function
Case 201: '翌日17時30分までの納品
納品期限 = (DateAdd("d", 1, date_received)) + TimeSerial(17, 30, 0)
Exit Function
Case 301: 'お客様との調整
納品期限 = "お客様との調整"
Exit Function
Case Else
納品期限 = ""
End Select
End Function
【これまでの試み】
(1)イミディエイトウインドウ
「?納品期限(101,#2008/5/20#,"9:00")」と入力すると「2008/05/20 17:30:00」と表示される。問題なし。
(2)フィールド更新
データを更新するため次のSQL文を実行する。
「UPDATE Job_List SET Job_List.担当受付日時 = 納品期限([作業番号],"#" & [担当受付日時] & "#","#" & Format([担当受付日時],"HH:NN") & "#");」
■ここで問題発生。「型変換エラー」メッセージが出て、データを更新できません。
どなたか、解法を御教示願います。
No.1ベストアンサー
- 回答日時:
「担当受付日時」の属性は何ですか?
日付型なら "#" & [担当受付日時] & "#" ではなく、[担当受付日時]と記述します。
文字型ならFunction 納品期限()の引数を文字型とし、関数内で、IsDate、CDate関数を
使ってチェックと変換を行うべきです。
あと、気になった点を少し直してみました。
Function 納品期限(ByVal 作業番号 As Integer, ByVal 受領日 As Date, ByVal 受領時間 As Date) As Variant
Select Case 作業番号
Case 101: '当日17時30分までの納品
納品期限 = Format(受領日, "YYYY/MM/DD 17:30:00")
Case 201: '翌日17時30分までの納品
納品期限 = Format(DateAdd("d", 1, 受領日), "YYYY/MM/DD 17:30:00")
Case 301: 'お客様との調整
納品期限 = "お客様との調整"
Case Else
納品期限 = ""
End Select
End Function
(1)パラメータにByValキーワードを付けました。
(2)受領日の0時0分0秒を作る意味はないのでは?
(3)受領時間は最終的に使用されないようです。
それと、SQLの中でユーザ関数を呼び出すと、遅いので、今回のように
4通りくらいならIif関数をネストしてみてはいかがでしょう。
=Iif(作業番号=101,Format(受領日,"YYYY/MM/DD 17:30:00")
,Iif(作業番号=201,Format(DateAdd("D",1,受領日),"YYYY/MM/DD 17:30:00")
,Iif(作業番号=301,"お客様との調整","")))
この回答への補足
早速のご指導、まことにありがとうございました。
ご指摘の点について、記述誤り、表現不足がありましたことをお詫び申し上げます。
取り急ぎ御指導に基づき修正作業を行い、あらためて御礼を申し上げたく存じます。
よろしくお願いします。
<ご質問>
「担当受付日時」の属性は何ですか?
<ご質問に対する回答>
下記に示すように、「受領日」の誤りであり、「受領日」は日付型としております。
<記述誤り>
----------誤り1----------
【前提】
(1)テーブル「納品期限管理テーブル」
----------修正1----------
(1)テーブル「Job_List」
----------誤り2----------
【これまでの試み】
(2)フィールド更新
データを更新するため次のSQL文を実行する。
「UPDATE Job_List SET Job_List.担当受付日時 = 納品期限([作業番号],"#" & [担当受付日時] & "#","#" & Format([担当受付日時],"HH:NN") & "#");」
----------修正2----------
「UPDATE Job_List SET Job_List.納品期限 = 納品期限([作業番号],"#" & [受領日] & "#","#" & Format([受領日],"HH:NN") & "#");」
<表現不足等>
・時間について
記述サンプルは簡略化してあり、午前中に作業依頼を受領したものは当日中に、午後のものは翌日に納品します。
よって、受領時間は必要な情報です。ただし、御指導により自分なりに考えた結果、「受領日」が日付と時間の情報をもっていたら、引数として組み込むことは不要と判断しますので、一から作り直します。
・Iif関数について
有益な指導、ありがとうございます。ただ、作業種別は全部で39種あり、納品までの期限設定ルールは13種あります。また、営業日を勘案する処理を行う必要から、case文で処理したいと存じます。
以上
☆ 御礼 ☆
御指導に基づく作業を行い、次のSQL文でフィールドデータを更新できました。
UPDATE Job_List SET tbl.納品期限 = 納品期限([作業番号],[受領時間]);
これより、各種処理・画面の製作に移ります。
本当にありがとうございました。
<修正作業概要>
1 関数の修正
大変ありがとうございました。
特に、「Format(DateAdd("d", 1, 受領日), "YYYY/MM/DD 17:30:00")」の表現については全く未知のことでした。
2 テーブルの再作成
テーブルの設計による障害を避けるため、テーブルを再作成しました。
拝
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Access(アクセス) ExcelのVBAコードについて教えてください。 4 2023/01/20 09:44
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Outlookの連絡先の中に項目を増...
-
ファイルメーカーについて
-
ExcelからAccessデータを検索す...
-
ファイルメーカーでの質問
-
ACCESSの型変換(日付型)について
-
Accessについて質問です
-
ファイルメーカーの印刷について
-
エクセルのDSUM関数について教...
-
Access2003で全文検索文書管理...
-
FileMakerで画像をまとめて書き...
-
[Access2003]メイン・サブフォ...
-
分数の入力
-
INSERT INTO table(DATE) VALUE...
-
ACCESS フォームに入力した文字...
-
Wordでの数式の入力
-
LOTUS NOTESについて
-
FileMakerでのテキスト処理
-
フィールド、インスタンス変数...
-
ワードでスペースを保護する方法
-
FileMakerの文字の一括変換につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「#エラー」の回避
-
アクセスで入力したデータの順...
-
accessのフィールドに10桁の数...
-
ExcelからAccessデータを検索す...
-
差し込み文書のルールで if the...
-
MS-WORDで、あるフィールドに入...
-
ACCESSでデータ変更箇所が分か...
-
WORD差し込み印刷:日付の処理 ...
-
「フィールド更新」が表示されない
-
フィールドの中のテキストを分...
-
FileMakerで特定フィールドを空...
-
Accessでボタンを押すと今日の...
-
Accessで値がnullの場合は計算...
-
FileMakerで画像をまとめて書き...
-
FileMakerで、フィールドの値が...
-
MS-ACCESSで中央値(ME...
-
Access フィールド内の値で、...
-
FileMakerで繰り返しフィールド...
-
access フィールドのサイズ(文...
-
A1、A2、A3・・・とデータを増...
おすすめ情報