Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


371 / 500 ページ ←次へ | 前へ→

【5785】Re:FileCopy ワイルドカードが使いたい
お礼  さとみ  - 05/8/8(月) 22:14 -

引用なし
パスワード
   ▼YU-TANG さん:
ご教授をありがとう御座います。
おかげさまでなんとか出来ました。
今後ともまた宜しく
お願いいたしますネ。
・ツリー全体表示

【5784】Re:1日を越えた時間はどうすれば良いので...
発言  小僧  - 05/8/8(月) 12:59 -

引用なし
パスワード
   ▼わん さん:
こんにちは。
続けて時間の丸めについてです。

>[#4411] 時刻の切捨て切り上げについて

>勤怠管理に役立つ時刻演算関数集
>http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaCalcTimeFunctions.html
>こちらが参考になると思います。


YU-TANG さんのサイトが紹介されているので、
せっかくですから使わせて頂きましょう。

ここで紹介されている関数はユーザー定義関数なので、そのままでは使えません。
ページの中ほどにある「ダウンロード」の説明を読んでインポートしてみましょう。
(わんさんの環境がダウンロードをしてはいけない環境でしたらすみません)

SELECT 社員労働時間.社員番号, TimeRound([出勤時間],-1,15) AS 出勤丸め,
TimeRound([退勤時間],-1,15) AS 退勤丸め
FROM 社員労働時間;

SQL ビューで確認してみて下さい。15分を切り捨てで丸められていると思います。

>又、表示方法の問題だけならMod演算子、\演算子をよく勉強すれば、
>Time関数なるものは使用しなくてもできるものなのでしょうか?

ダウンロードできない環境の場合、ユーザ定義関数を使いたくない場合です。

SELECT 社員労働時間.社員番号,
DateAdd("n", - Minute([出勤時間]) Mod 15,[出勤時間]) AS 出勤丸め,
DateAdd("n", - Minute([退勤時間]) Mod 15,[退勤時間]) AS 退勤丸め
FROM 社員労働時間;

15分以下を切り捨てるようなクエリになっています。

余談ですが、大手ファーストフードで賃金30分未満切り捨てが問題になっていましたね。
http://headlines.yahoo.co.jp/hl?a=20050801-00000086-mai-soci

労働基準法を読んでいないので良く解りませんが、
勝手に切り捨てるのはまずいのでしょうか…(笑)
・ツリー全体表示

【5783】Re:1日を越えた時間はどうすれば良いので...
発言  小僧  - 05/8/8(月) 11:49 -

引用なし
パスワード
   ▼わん さん:
こんにちは。

>お世話になりついでに時間計算と時間表示について教えて頂きたい

Access(VBA) の日付型に関してなのですがイミディエイトウィンドウ
(コードが表示されている状態で Ctrl + g)で確認してみましょう。

今日の日付がテーブルにあるとすると、その値は

>>>イミディエトウィンドウで「? CDbl(Date)」

「1900/01/01」からの差分である「38572」という数値になっています。

では時間はどうなっているのかとなると、

>>>「? CDbl(Now())」

小数がでてきましたよね。これが時間の部分になっています。


さて、[#3605]日日をまたいだ時の時間の計算の場合は

「PM5時」「AM1時30分」などの値が出てきますが、実際の値を調べてみると

>>>「? CDbl(#17:00#)」「? CDbl(#1:30#)」

と小数が表示されますが、整数部分は「0」になっています。
これは表示されている値は「17:00」ですが、
実際には「1899/12/30 1:30」という値が入っている事になります。

↑の方で「? CDbl(Date)」としましたが、
これも実際には「2005/08/08 00:00:00」という値ですね。

過去ログの方では「日付を持たない時間」を対象としているために

>DateDiff("n",[作業開始時間],[作業終了時間]+IIf([作業終了時間]<[作業開始時間],1,0))

となっていますが。今回は「Now()」で時間を代入しているため日付を持たせているので
そのまま「退勤時間」から「出勤時間」を引けば良いと思われます。

>>>「? DateDiff("n",#2005/08/08 12:00#,#2005/08/09 1:00#)」
>>>「? CDate(#2005/08/09 1:00# - #2005/08/08 12:00#)」
・ツリー全体表示

【5782】Re:フォームの入力制限
発言  小僧  - 05/8/8(月) 10:59 -

引用なし
パスワード
   ▼かずよ さん:
こんにちは。

解決されていますが。

>テキスト名 = DLookup("商品名", "売上テーブル", _
>           "商品CD =" & "[売上テーブル]![商品コード]")

で大丈夫でしたか?

商品コードが数値型でしたら

テキスト名 = DLookup("商品名", "売上テーブル", _
           "商品CD =" & [売上テーブル]![商品コード])

テキスト型でしたら

テキスト名 = DLookup("商品名", "売上テーブル", _
           "商品CD =' & [売上テーブル]![商品コード] &"'")

となると思うのですが…。
・ツリー全体表示

【5781】Re:フォームの入力制限
お礼  かずよ  - 05/8/8(月) 10:52 -

引用なし
パスワード
   ▼小僧 さん:

>テキスト名 = DLookUp("[商品名]","[売上テーブル]","[フォーム名]![商品CD]=[売上テーブル]![商品コード]")

テキスト名 = DLookup("商品名", "売上テーブル", _
           "商品CD =" & "[売上テーブル]![商品コード]")

とすれば、理想通り動いてくれました!
小僧様、ありがとうございました。

また別で質問することがあると思います。その際はよろしくお願いします。
・ツリー全体表示

【5780】Re:フォームの入力制限
質問  かずよ  - 05/8/8(月) 10:33 -

引用なし
パスワード
   ▼小僧 さん:
おはようございます。

>テキストボックスの「更新後処理」に、
>
>DLookup関数 か DCount関数 を使ってテーブルに重複するレコードが存在するかを確認する
>

教えていただいた通り、DLookup関数を使って他のテキストボックスに商品名を表示するよう、「変更後処理」にイベントプロシージャーを書いたのですが、エラーが出てしまいます。

テキスト名 = DLookUp("[商品名]","[売上テーブル]","[フォーム名]![商品CD]=[売上テーブル]![商品コード]")

実行時エラー'64479'
クエリパラメータとして指定した式でエラー’このオブジェクトには、オートメーション オブジェクト’フォーム名!商品CDは含まれません。’が発生しました。

よろしくお願いします。
・ツリー全体表示

【5779】Re:フォームの入力制限
発言  小僧  - 05/8/8(月) 9:38 -

引用なし
パスワード
   ▼かずよ さん:
おはようございます。

テキストボックスの「更新後処理」に、

DLookup関数 か DCount関数 を使ってテーブルに重複するレコードが存在するかを確認する

処理を組み込んであげれば良いと思います。
・ツリー全体表示

【5778】Re:最終項目の最後の移動
発言  小僧  - 05/8/8(月) 9:30 -

引用なし
パスワード
   ▼安久 さん:
こんにちは。

>今、このリストボックスに各検査名ごとの最後の日にちの結果を表示できるように

リストボックスに入れるクエリを考えた方が解決がはやそうですね。

クエリの SQL ビューに下記 SQL を入れて結果を確認してみて下さい。

SELECT P.検査日, P.検査名, Ka検査.検査結果, Ka検査.単位
FROM [
SELECT Max(Ka検査.検査日) AS 検査日, Ka検査.検査名
FROM Ka検査
GROUP BY Ka検査.検査名
・ツリー全体表示

【5777】Re:1日を越えた時間はどうすれば良いので...
お礼  わん  - 05/8/7(日) 14:17 -

引用なし
パスワード
   小僧さん:

できました。長い間お付き合い下さりありがとうございました。
心より御礼申し上げます。

投稿する前に20冊以上の書籍を読みあさったのですが、
24時を超えて処理することに関する書籍が見つからなく大変困っておりました。
何しろAccessを始めて、まだ2週間足らずなもので、
それに加えて変数処理と合わせた応用がきかず混乱していまい、大変助かりました。

お世話になりついでに時間計算と時間表示について教えて頂きたいのですが、

過去の投稿で
【3605】日日をまたいだ時の時間の計算
【4411】時刻の切捨て切り上げについて
を読むと、

通常の計算方法と異なる処理が必要であることが書かれているようですが、
今回の場合は1日の起点を午前5時としているのでこの処理は必要なく、
一般的な計算式で計算されると考えてよろしいのでしょうか?

Time関数についてクエリで試してみたところ未定義関数となってしまいました。
これは使い方が間違っているからなのでしょうか。
(現在使用しているOSはWinXPPro、Access2000)
又、表示方法の問題だけならMod演算子、\演算子をよく勉強すれば、
Time関数なるものは使用しなくてもできるものなのでしょうか?

今後の参考のために、教えて頂けたら有り難いと思います。

今回は、本当に有難うございました。
・ツリー全体表示

【5776】Re:1日を越えた時間はどうすれば良いので...
お礼  わん  - 05/8/6(土) 20:30 -

引用なし
パスワード
   小僧さん:


お返事が遅くなり申し訳ありませんでした。
出張に行っていたもので拝見することができませんでした。
今回もご丁寧な回答ありがとうございます。

早速、やってみます。
また、解らないことがありましたら
ご教授お願いいたします。
・ツリー全体表示

【5775】Re:FileCopy ワイルドカードが使いたい
回答  YU-TANG WEB  - 05/8/6(土) 20:27 -

引用なし
パスワード
   こんばんは、YU-TANG です。

> Access VBAの中でワイルドカードを使ったファイル一括コピーの

DOS の copy コマンドを使う、とか。

Shell Environ$("ComSpec") & " /c copy C:\AAA\*.BMP D:\BBB\", vbHide
・ツリー全体表示

【5774】FileCopy ワイルドカードが使いたい
質問  さとみ  - 05/8/6(土) 16:17 -

引用なし
パスワード
   Access VBAでワイルドカードと使って
C:ドライブのAAAのフォルダの中の拡張子がBMPの物を
D:ドライブのBBBのフォルダに一括コピーをしていのです。

FileCopy C:\AAA\*.BMP, D:\BBB\

FileCopyはワイルドカードが使えないようです、このような場合に、
Access VBAの中でワイルドカードを使ったファイル一括コピーの
方法はございませんでしょうか? ご指導よろしくお願い致します。
・ツリー全体表示

【5773】フォームの入力制限
質問  かずよ  - 05/8/5(金) 19:09 -

引用なし
パスワード
   いろんな方法を試したのですが、行き詰ってしまいました。よろしくお願いします。
 
フォーム上でテキストに手入力で商品コードを入れてもらい、その条件でクエリをエクスポートしてデータを抽出します。
(商品コードが400を超え、コンボボックスやリストでは検索しずらいため)

入力した商品コードが、[売上テーブル]に存在しない場合、「商品コードが存在しません」とエラー表示させたいです。商品コードは複数レコードあります。

[売上テーブル]
商品コード 商品名 数量  顧客名・・・・
123    ABC  1    あ
345    JKO  3    う
123    ABC  1    え
・ツリー全体表示

【5772】Re:最終項目の最後の移動
質問  安久  - 05/8/5(金) 16:15 -

引用なし
パスワード
   お返事ありがとうございます。
 先の返事の通りFormにコマンドボタンを作りVBAをつくったのですが、識別しませんでした。

Formにリストボックスとして今は日にち順にクエリからデータを引っ張っています。(SELECT Ka検査.検査日,ka検査.検査名,ka検査.検査結果,ka検査.単位 FROM ka検査 ORDER BY ka検査.検査日 DESC;)
と言う風に表示されるように作っています。
(日にち順に全ての結果が表示されている)

今、このリストボックスに各検査名ごとの最後の日にちの結果を表示できるようにすればDLookup で指定すればできるかと思い意見を聞きたいです。
後、先にうかがったのがうまくいかなかったので詳しく教えていただけたら幸いです。
・ツリー全体表示

【5771】Re:応答なしの表示がでる。
お礼  さつき  - 05/8/5(金) 15:13 -

引用なし
パスワード
   ▼小僧 さん、こんにちは。

やはり、コードのミスでした。
小僧さんの書いて下さったコードをそのままコピーしてみたら、動きました。
スピードも大幅アップです!
ほんとうにありがとうございました。
・ツリー全体表示

【5770】Re:応答なしの表示がでる。
発言  小僧  - 05/8/5(金) 14:33 -

引用なし
パスワード
   ▼さつき さん:
こんにちは。

>やはりACCESSのバージョンの問題なのでしょうか?

こちらでは再現しないエラーなのですが、
恐らくちょっとしたコードのミスのような気がします。

現在のコードをご提示して頂けないでしょうか?
・ツリー全体表示

【5769】Re:応答なしの表示がでる。
質問  さつき  - 05/8/5(金) 14:09 -

引用なし
パスワード
   ▼小僧 さん
ご回答ありがとうございます。

rs2.Close
は追加されています。やはりACCESSのバージョンの問題なのでしょうか?
・ツリー全体表示

【5768】Re:1日を越えた時間はどうすれば良いので...
発言  小僧  - 05/8/5(金) 13:53 -

引用なし
パスワード
   ▼小僧 さん:
ごめんなさい。
11時を超えると日付が変わるかどうかを実験していたので(笑)
5時でしたら「Hour(Now())>5」です。

UPDATE 社員労働時間 SET 社員労働時間.退勤時間 = Now()
WHERE (((社員労働時間.社員番号)=[Forms]![社員用タイムレコーダー]![社員番号])
AND ((社員労働時間.打刻日付)=IIf(Hour(Now())>5,Date(),Date()-1)));
・ツリー全体表示

【5767】Re:応答なしの表示がでる。
発言  小僧  - 05/8/5(金) 13:48 -

引用なし
パスワード
   ▼さつき さん:
こんにちは。

こちらでは再現しないので、

>オブジェクトが開いている場合は、操作は許可されません

が出る理由から判断させて頂くのですが、

>'更新
>    rs2.Update
>    rs2.Close
      ↑これ!
>  End If
>  rs1.MoveNext
>
>  Loop

が前回のコードより足されておりますが、追加されていますでしょうか?
・ツリー全体表示

【5766】Re:応答なしの表示がでる。
質問  さつき  - 05/8/5(金) 13:27 -

引用なし
パスワード
   ▼小僧 さん:

>コードを削ったり付け足したりしていた時のミスです…。
>
>>  rs1.Open "list", cn, adOpenStatic, adLockReadOnly
>>  Set cn = CurrentProject.Connection '接続
>
>コネクションする前にオープンしています…。
>
>接続をオープンする前に入れてあげてください。


その2行は、前に教えて頂いたコードに入っているので、
2行を入れ替えてみたのですが、こんどは

rs2.Open sql, cn, adOpenKeyset, adLockOptimistic

のところで、「オブジェクトが開いている場合は、操作は許可されません」
と出ます。
どのように直したらいいでしょうか?
度々お手数をかけます。
・ツリー全体表示

371 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084735
(SS)C-BOARD v3.8 is Free