Access VBA質問箱 IV

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

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


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

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

引用なし
パスワード
   ▼さつき さん:
ごめんなさい。

コードを削ったり付け足したりしていた時のミスです…。

>  rs1.Open "list", cn, adOpenStatic, adLockReadOnly
>  Set cn = CurrentProject.Connection '接続

コネクションする前にオープンしています…。

接続をオープンする前に入れてあげてください。
・ツリー全体表示

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

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

今さっそくやってみましたが、

>  rs1.Open "list", cn, adOpenStatic, adLockReadOnly

のところで、
「この操作を実行するために接続を使用できません。このコンテキストで閉じているかあるいは無効です。」
というエラーがでます。
アクセスのバージョンのせいでしょうか??
よろしくご教示お願いいたします。
・ツリー全体表示

【5763】Re:/のない日付の出し方
お礼  サチチ  - 05/8/5(金) 11:53 -

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

ありがとうございます。桁は多分全て8ケタだと思う
ので、left・Mid関数を使ってみます。
・ツリー全体表示

【5762】Re:/のない日付の出し方
発言  たん  - 05/8/5(金) 11:40 -

引用なし
パスワード
   >桁が足りない時はどのようになるのでしょうか。
>200585
>20050805

横から失礼。

8桁の場合であれば、小僧さんが言われる形でOKですが、
2005112というように、桁数が8桁で無い場合、抽出はムリだと
思って下さい。

なぜなら、上記の例の場合、2005/1/12とも、2005/11/2とも
考えられるからです。
・ツリー全体表示

【5761】Re:/のない日付の出し方
発言  小僧  - 05/8/5(金) 11:17 -

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

>日付で 20051215 の様になっています。

桁が足りない時はどのようになるのでしょうか。
200585
20050805

必ず8桁であれば、
Year は 左4桁     → Left関数
Month は 5桁目から2文字 → Mid関数

で求められると思います。
・ツリー全体表示

【5760】Re:1日を越えた時間はどうすれば良いので...
回答  小僧  - 05/8/5(金) 11:11 -

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

>情けないことですが、どうか宜しくお願いいたします。

いえいえ、わん さんだけでなく、同じ様な事で困っている他の方が
今後過去ログとして参考になさるかもしれません。

わん さんのご提示される内容も段々と当方に伝わりやすくなっていますよ。

>DCount("*", "社員労働時間", "社員番号=Forms!社員用タイムレコーダー!社員番号" _
>      & "And 打刻日付=#" & MyDate & "#") = 0

こちらは当方の検証不足でした。すみません。

「Forms!社員用タイムレコーダー!社員番号」も「"」の外に出す必要があります。
※フォーム名、コントロール名である事を明記する [ ] をつけてあります。

>>DCount("*", "社員労働時間", "社員番号 =" & Forms![社員用タイムレコーダー].[社員番号] _
>>       & "And 打刻日付 = #" & MyDate & "#") = 0 Then

>>DCount("*", "社員労働時間", "社員番号 =" & Forms![社員用タイムレコーダー].[社員番号] _
>>    & "And 打刻日付 = #" & MyDate & "# And Not IsNull(退勤時間)") > 0

退勤ボタンが「社員用タイムレコーダー」フォームにあるのであれば、

>>If DCount("*", "社員労働時間", "社員番号 = " & Me.社員番号 _
>>       & "And 打刻日付 = #" & MyDate & "#") = 0 Then

>>If DCount("*", "社員労働時間", "社員番号 = " & Me.社員番号 _
>>    & "And 打刻日付 = #" & MyDate & "# And Not IsNull(退勤時間)") > 0 Then


>クエリの中身は以下のようになっています。

見事に退勤打刻クエリに「Date」関数がいらっしゃいますね。

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

上記 SQL をクエリのSQLビューに貼り付けて確認されてみて下さい。
・ツリー全体表示

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

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

ありがとうございます。
フィールド名は前回と同じです。すいません。
さっそくやってみます。
・ツリー全体表示

【5758】/のない日付の出し方
質問  サチチ  - 05/8/5(金) 10:08 -

引用なし
パスワード
   いつも大変助けられてます。今回も、基本のものを
教えて下さい。

日付で 20051215 の様になっています。/は入ってないデータを
インポートしました。
クエリで、Year と、Month が取りたいのですが、どんな関数に
すればいいですか?

ご教授下さい。よろしくお願いします。
・ツリー全体表示

【5757】Re:1日を越えた時間はどうすれば良いので...
質問  わん  - 05/8/4(木) 20:28 -

引用なし
パスワード
   ▼小僧 さん:
早速のご返信感謝致します。
度々ですがお願いします。
打刻日付は日付型です。書式は日付(L)となっております。
先程教えていただいたコードも謝りがあったので訂正しました。

今度は、どちらにも構文エラーが発生しました。
 構文エラーの内容は以下の通りです。
 クエリ式
 社員番号=Forms!社員用タイムレコーダー!社員番号And打刻日付
 =#2005/08/01#'の構文エラー:演算子がありません


早速コードを見直して書き直しました。
確認のため、そのままをコピーします。

1つめ
If DCount("*", "社員労働時間", "社員番号=Forms!社員用タイムレコーダー!社員番号" & "And 打刻日付=#" & MyDate & "#") = 0 Then

2つめ
  If DCount("*", "社員労働時間", "社員番号=Forms!社員用タイムレコーダー!社員番号 And" & " 打刻日付=#" & MyDate & "# And Not IsNull(退勤時間)") > 0 Then

>あとは
>>DoCmd.OpenQuery "退勤打刻"
>
>にある「退勤打刻」クエリの中身ですが…。
>ここにもDate関数を使っていませんでしょうか?

クエリの中身は以下のようになっています。

「出勤打刻」
フィールド  式1:Forms!タイムレコーダー!社員番号   式2:Date()   式3:Now()
レコードの追加        社員番号            打刻日付    出勤時間

「退勤打刻」
フィールド   退勤時間   打刻日付     社員番号
レコードの更新   Now()              
抽出条件             Date()   Forms!タイムレコーダー!社員番号

情けないことですが、どうか宜しくお願いいたします。
・ツリー全体表示

【5756】Re:1日を越えた時間はどうすれば良いので...
回答  小僧  - 05/8/4(木) 19:30 -

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

>1つめは、
>If DCount("*", "社員労働時間", "社員番号=Forms!社員用タイムレコーダー!社員番号 And " _
>     & "打刻日付=#" & MyDate & "#") " & "And Not IsNull(退勤時間)") > 0 Then

閉じカッコの位置がおかしい…ですね。

If DCount("*", "社員労働時間", "社員番号=Forms!社員用タイムレコーダー!社員番号 And " _
     & "打刻日付=#" & MyDate & "# And Not IsNull(退勤時間)") > 0 Then


>2つめは、
>ちなみにテーブルは以下のようになっています。
>勤怠ID 社員番号  打刻日付   出勤時間  退勤時間 
>1    太郎   2005年8月1日  9:50:00  22:10:10
>2    花子   2005年8月1日  9:55:00  22:10:30
>3    一郎   2005年8月1日  11:50:20        ←ここが問題です。
>・     ・      ・      ・
>・     ・      ・      ・
>・     ・      ・      ・     
>
>出勤時(追加クエリ)と退勤時(更新クエリ)となっています。
>お忙しいとは思いますが宜しくお願いします。

直接の原因かどうかは解りませんが、「2005年8月1日」という表記ですと
打刻日付は「日付型」でなくて「テキスト型」でしょうか?
そうですと、「#」の部分が「'」となりますね。

あとは
>DoCmd.OpenQuery "退勤打刻"

にある「退勤打刻」クエリの中身ですが…。
ここにもDate関数を使っていませんでしょうか?
・ツリー全体表示

【5755】Re:1日を越えた時間はどうすれば良いので...
質問  わん  - 05/8/4(木) 19:05 -

引用なし
パスワード
   小僧さん:
 大変解りやすくご説明いただきありがとうございます。
 時間の考え方も理解できました。

教えて頂いた通り実際にやってみました。
2つ問題点が発生しました。

1つめは、
こちらでストップしてしまいます。
コードの書き方が悪いのでしょうか?
If DCount("*", "社員労働時間", "社員番号=Forms!社員用タイムレコーダー!社員番号 And 打刻日付=#" & MyDate & "#") " & "And Not IsNull(退勤時間)") > 0 Then

2つめは、
上のコードを書きかえずに、教えていただいたコードだけを書きかえて実行したところ止まることはなかったのですが、テーブルに書き込まれませんでした。
ちなみにテーブルは以下のようになっています。
勤怠ID 社員番号  打刻日付   出勤時間  退勤時間 
1    太郎   2005年8月1日  9:50:00  22:10:10
2    花子   2005年8月1日  9:55:00  22:10:30
3    一郎   2005年8月1日  11:50:20        ←ここが問題です。
・     ・      ・      ・
・     ・      ・      ・
・     ・      ・      ・     

出勤時(追加クエリ)と退勤時(更新クエリ)となっています。
お忙しいとは思いますが宜しくお願いします。


▼小僧 さん:
>▼わん さん:
>こんにちは。
>
>>翌日午前1:00の労働時間の場合があります。
>
>わん さんの職場は、午前5時に日付が替わるとすると
>
>Dim MyDate As Date
>  If Hour(Now()) < 5 Then
>    MyDate = Date - 1
>  Else
>    MyDate = Date
>  End If
>
>これで変数「MyDate」に日付が入ります。
>
>> If DCount("*", "社員労働時間", "社員番号=Forms!社員用タイムレコーダー!社員番号 " _
>>      & "And 打刻日付=Date()") = 0 Then
>
>ここの Date関数を先ほどの「MyDate」に置き換えるのですが、
>日付型なので「#」で括る事になります。
>
>  If DCount("*", "社員労働時間", "社員番号=Forms!社員用タイムレコーダー!社員番号 " _
>      & "And 打刻日付 = #" & MyDate & "#") = 0 Then
>
>もう一箇所の Date 関数も同じ事をしてあげてください。
>
>もし説明が解り難いようでしたら再度ご質問下さい。
・ツリー全体表示

【5754】Re:1日を越えた時間はどうすれば良いので...
回答  小僧  - 05/8/4(木) 16:46 -

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

>翌日午前1:00の労働時間の場合があります。

わん さんの職場は、午前5時に日付が替わるとすると

Dim MyDate As Date
  If Hour(Now()) < 5 Then
    MyDate = Date - 1
  Else
    MyDate = Date
  End If

これで変数「MyDate」に日付が入ります。

> If DCount("*", "社員労働時間", "社員番号=Forms!社員用タイムレコーダー!社員番号 " _
>      & "And 打刻日付=Date()") = 0 Then

ここの Date関数を先ほどの「MyDate」に置き換えるのですが、
日付型なので「#」で括る事になります。

  If DCount("*", "社員労働時間", "社員番号=Forms!社員用タイムレコーダー!社員番号 " _
      & "And 打刻日付 = #" & MyDate & "#") = 0 Then

もう一箇所の Date 関数も同じ事をしてあげてください。

もし説明が解り難いようでしたら再度ご質問下さい。
・ツリー全体表示

【5753】Re:1日を越えた時間はどうすれば良いので...
質問  わん  - 05/8/4(木) 15:35 -

引用なし
パスワード
   小僧さん:
早速のご返答ありがとうございます。
労働環境のことに触れておりましたが、
例を挙げると
本日午後12:00〜翌日午前1:00の労働時間の場合があります。
(あまり笑えないですが・・・)
休憩時間は後でクエリで計算しますので気にしなくて構いません。

ですから、
>Dim MyDate As Date
>
>とでもして、変数「MyDate」に
>
>「退勤ボタンを押す時間が12:00より早かったら Date() - 1」
>「                    以降だったら  Date()  」
で良いと思います。

具体的にはどのように書き込めばよろしいのでしょうか?
お恥ずかしいのですがよくわかりません。
どうか宜しくお願いしします。

Private Sub 退勤_Click()
 Dim MyDate As Date
 ・
 ・
 ・
 If DCount("*", "社員労働時間", "社員番号=Forms!社員用タイムレコーダー!社員番号 And 打刻日付=Date()") = 0 Then
   MsgBox "出勤処理が済んでいません。"
   Call Cls社員氏名
   Exit Sub
 End If
  If DCount("*", "社員労働時間", "社員番号=Forms!社員用タイムレコーダー!社員番号 And 打刻日付=Date()" & "And Not IsNull(退勤時間)") > 0 Then
   MsgBox "すでに退勤済みとなっています。"
   Call Cls社員氏名
   Exit Sub
 End If
 ・
 ・
 ・
 End Sub
・ツリー全体表示

【5752】Re:1日を越えた時間はどうすれば良いので...
発言  小僧  - 05/8/4(木) 14:27 -

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

わんさん の働いていらっしゃる環境によって
色々考えなければならないと思います。

例えば当方の環境ですと午前中の退勤は夜勤明けしかありえませんので

Dim MyDate As Date

とでもして、変数「MyDate」に

「退勤ボタンを押す時間が12:00より早かったら Date() - 1」
「                    以降だったら  Date()  」

というロジックを組めば問題がないのですが、
・午前半休・午後半休がある
・夜勤明け残業で12:00を超える事がある(おいおい…って感じですが(笑))
・3交代制で微妙な時間がある
etc…

という訳で必ずしもうまく行くというわけでもないです。
・ツリー全体表示

【5751】1日を越えた時間はどうすれば良いのでしょ...
質問  わん  - 05/8/4(木) 13:40 -

引用なし
パスワード
   タイムレコーダーを使用した時間管理をしようと思うのですが、
1日を越えると上手くいきません。
どこを修正すれば良いのでしょうか?

コードは以下のようになっております。

Private Sub Cls社員氏名()
Me.社員番号 = Null
Me.社員氏名 = Null
End Sub
Private Sub 退勤_Click()
 If IsNull(Me.社員番号) Then
 MsgBox "社員番号を入力して下さい。"
  Me.社員番号.SetFocus
 Exit Sub
 End If
 If DCount("*", "社員労働時間", "社員番号=Forms!タイムレコーダー!社員番号 And 打刻日付=Date()") = 0 Then
   MsgBox "出勤処理が済んでいません。"
   Call Cls社員氏名
   Exit Sub
 End If
  If DCount("*", "社員労働時間", "社員番号=Forms!タイムレコーダー!社員番号 And 打刻日付=Date()" & "And Not IsNull(退勤時間)") > 0 Then
   MsgBox "すでに退勤済みとなっています。"
   Call Cls社員氏名
   Exit Sub
 End If
 DoCmd.SetWarnings False
 DoCmd.OpenQuery "退勤打刻"
 Call Cls社員氏名
 DoCmd.SetWarnings True
End Sub

多分、ここら辺に修正を加えるのではないかと思うのですが?
If DCount("*", "社員労働時間", "社員番号=Forms!タイムレコーダー!社員番号 And 打刻日付=Date()") = 0 Then

どなたか教えて頂けますでしょうか。
お願いします。
・ツリー全体表示

【5750】Re:住所入力支援について
お礼  ジュン  - 05/8/4(木) 11:56 -

引用なし
パスワード
   ▼小僧 さん:
>▼ジュン さん:
>こんにちは。
>ご提示された内容ですと解りづらいのですが
>
>>そしてそのデータを呼び出したところ、
>
>どこ(登録したフォーム?)に、どうやって呼び出しているのでしょうか。
>
>
>当方が検証した結果ですと、
>住所入力支援機能を使用しても普通にテーブルへの登録も
>登録したデータをフォームに読み出す事もできるのですが…。

小僧さん。この間はありがとうございました。

今回は小生のテストミスでした。お手数をおかけしました。
・ツリー全体表示

【5749】Re:レポート内のガンチャート
お礼  じーや  - 05/8/4(木) 11:51 -

引用なし
パスワード
   ▼小僧 さん:
お世話になりました。なんとか出来ました、有難うございます。
・ツリー全体表示

【5748】Re:住所入力支援について
発言  小僧  - 05/8/4(木) 10:22 -

引用なし
パスワード
   ▼ジュン さん:
こんにちは。
ご提示された内容ですと解りづらいのですが

>そしてそのデータを呼び出したところ、

どこ(登録したフォーム?)に、どうやって呼び出しているのでしょうか。


当方が検証した結果ですと、
住所入力支援機能を使用しても普通にテーブルへの登録も
登録したデータをフォームに読み出す事もできるのですが…。
・ツリー全体表示

【5747】住所入力支援について
質問  ジュン  - 05/8/3(水) 19:39 -

引用なし
パスワード
   こんにちは。
住所録の登録画面を作成中ですが、郵便番号を入力して住所入力支援機能を利用して住所を表示して、そのデータ(住所と郵便番号)をテーブルに書き込むこともできました。そしてそのデータを呼び出したところ、住所は表示できますが郵便番号が表示できません。
郵便番号のプロパティで住所入力支援の指定をはずすと郵便番号の表示はできます。
住所入力支援機能を指定して、かつ再表示をできる方法をお教え下さい。お願いします。
・ツリー全体表示

【5746】Re:レポート内のガンチャート
回答  小僧  - 05/8/3(水) 17:42 -

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

>今日の日付の日だけを表示させる関数はありますでしょうか。

Help も有効に使いましょうね。

Day(Date)

Format(Date,"d")

→"03"で出したければ Format(Date,"dd")
・ツリー全体表示

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