Microsoft Access 掲示板

カレンダー形式のスケジュール[氏名選択での表示]

11 コメント
views
4 フォロー

hatenaさんのカレンダー形式のスケジュールをもとに作成しました。

複数人でスケジュール管理をして、
各々でも閲覧入力できる画面を作りたいと思い個人のフォームを作成しました。
hatenaさんのほうでも質問させていただいたのですがやはりどうしてもわからずこちらに投稿させていただきます。

まず、クエリの条件に[氏名IDは?]と入力しても表示しませんでした。
次にhatenaさんに教えていただき、メインフォームに非連結の[txt氏名ID]テキストボックスを作成し、
リンク親フィールドにtxtDate;txt氏名ID、
リンク子フィールドに日付;氏名ID
としました。
フォームを開くとIDを聞いてくれてサブフォームには指定したIDのみ表示されるのですが、メインフォームには全員のスケジュールが表示されます。
次にアドバイスいただいてOpenRecordsetのSQL文に抽出条件を加えたのですが、ここで躓いています。
全くの初心者素人なので見当違いのことをしているかもしれませんがお許しください。

まず、
Const smi1 As String = "氏名ID"
Const smi2 As String = "txt.氏名ID"
で宣言しました。
次に、
Set rs = CurrentDb.OpenRecordset("SELECT 日付,予定または実績2,氏名,お客様名,時間 FROM Q_ScheSubForm_ko WHERE " & " 日付 > #" & FirstDay & "# AND 日付 <=#" & FirstDay + 42 & "#" And smi1 = " & smi2", dbOpenForwardOnly, dbReadOnly)
としたのですが、「型が一致しません」と出ます。

お恥ずかしいですがよろしくお願いします。

ゆきぴ
作成: 2019/05/22 (水) 15:00:22
通報 ...
1

次にアドバイスいただいてOpenRecordsetのSQL文に抽出条件を加えたのですが、ここで躓いています。

氏名ID フィールドが数値型とするなら、下記のようなコードになります。

Dim strWhere As String

strWhere = "日付 > #" & FirstDay & "# AND 日付 <=#" & FirstDay + 42 & "# And 氏名ID = " & Me.txt氏名ID

Set rs = CurrentDb.OpenRecordset( _
    "SELECT 日付,予定または実績2,氏名,お客様名,時間 FROM Q_ScheSubForm_ko WHERE " & strWhere, _
    dbOpenForwardOnly, dbReadOnly)

VBAコード内に、SQL文を記述するときは、SQL文は単なる文字列になるということを留意してください。
その文字列がSQLとして正しいものになるように記述します。

コード内での、文字列と変数の扱いについては、下記に詳しく解説してますので、熟読して理解を深めてください。

Access上のコード内で引用符(")と単引用符(')の使い分けについて - hatena chips

2
ゆきぴ 2019/05/22 (水) 17:23:04 598e9@20787 >> 1

ありがとうございます。
会社からはhatenaさんのhatena chipsがブロックされてしまってスマホからメモ帳に打ち直していました。(^^;)

教えてもらったように実行したところ、

実行時エラー'3075'
クエリ式'日付>#2019/04/27# AND 日付 <=#2019/06/08# And 氏名ID='の構文エラー:演算子がありません。

と出ました。
色々調べてはみて空白を入れてみたり消してみたり、引用符を消してみたり変えてみたり、氏名IDのテキストボックスの書式を数値にしてみたりしましたが解決しませんでした。
フォーム上の設定ミスでしょうか?

3

txt氏名ID に氏名IDを入力しておく必要があります。規定値にも氏名IDを設定しておいて試してみてください。

あと、下記の点にも教えてください。
予定フィールドの 氏名ID フィールドは数値型ですか、テキスト型ですか。

4
ゆきぴ 2019/05/23 (木) 11:49:50 598e9@20787

ありがとうございます。

予定フィールドの氏名IDは数値型でサブフォームにはコンボボックスで作成しています。

>txt氏名ID に氏名IDを入力しておく必要があります。規定値にも氏名IDを設定しておいて試してみてください。

txt氏名IDのコントロールソースと規定値に[氏名ID]にすると、
実行時エラー'2424'
指定した式にMicrosoftAccessが見つけることができないフィールド、コントロール、プロパティ名が含まれています。
になります。
txt氏名IDのコントロールソースと規定値に=[F_calendarSF].[Form]![氏名ID]を設定しましたが同じく3075の実行時エラーが出ます。
サブフォームの氏名IDの規定値に数字を入れていくと、メインフォームサブフォームとも規定値のIDのスケジュールだけが表示されました。

出来れば入力フォームを開くときにIDを聞かれてそれを表示するという形にしたいです。

5

txt氏名ID のコントロールソースには何も設定しません。
既定値には、実際に存在する 氏名ID を設定しておいてください。
その個人のデータが開いた直後に表示されます。

あるいは、下記の式を設定しておいてもいいでしょう。

=DLookup("氏名ID","個人マスター")

テーブルの先頭の個人のデータが表示されます。

6
ゆきぴ 2019/05/24 (金) 18:01:49 598e9@20787

ありがとうございます。
今日は何もできなかったのでまた来週検証してみます。

7

いろいろ複雑なこともあると思いますので、よろしかったら、現状のフォームを右のファイル送信フォームから送ってもらえれば、内容を見て、具体的にアドバイスができると思います。

8
ゆきぴ 2019/05/27 (月) 14:51:20 598e9@20787

ありがとうございます。
フォームを送りたいのですが会社のセキュリティ上ページが開けません。
今は別フォームでIDを入力するフォームを作成して、txt氏名IDの規定値に =[Forms]![F_ID]![txtID] を設定したら入力されたIDが表示されました。
menu画面 ⇒ ID入力画面 ⇒ カレンダー表示 となるのでもう少しスマートな方法がないかと模索中です。(^^;)

11
ゆきぴ 2019/05/30 (木) 09:55:21 598e9@20787

色々お気遣いいただきありがとうございました。
今回はMENU画面で個別のフォームを開くボタンの前にポップアップで番号を入力する画面を作成しました。
この形でOKが出たのでこのままにしておこうと思います。(^^;)

またお聞きすることがたくさん出てくると思いますのでよろしくお願いします。