MS Access Tips/Sample and VBA and Blog customize etc...

カレンダー形式のスケジュール管理フォーム作成 その3

さて、スケジュール管理のその3です。前回まではカレンダーのユーザーインタフェイス部分を作成してきましたが、ようやくスケジュールデータを格納するテーブル設計です。通常はテーブル設計から始めるのがデータベース開発の基本ですが、今回はカレンダー形式というUIの特殊性から逆になりましたので、これが普通とは思わないでください。

テーブルを作成したら、テーブルの予定データのカレンダーへの表示コード、また、詳細データの表示、入力用のフォームを作成します。

FrmCalendar12.png

難易度:

予定テーブルの設計

まずは、テーブル設計です。

T_予定

フィールド名 データ型
予定ID オートナンバー型(主キー)
日付 日付/時刻型
時刻 日付/時刻型
件名 テキスト型
予定内容 メモ型

必要に応じてフィールドは追加してください。

予定表示プロシージャの作成

フォームモジュールに下記のプロシージャを作成します。

前回のSetCalendar関数の最後で上記のプロシージャを呼び出します。Public宣言している理由は後ほど。

これで、カレンダーにT_予定の件名が表示されます。

FrmCalendar9.png

詳細データ表示用のサブフォームを配置

件名以外のデータの表示とデータ入力ですが、カレンダーの横にサブフォームとして連結フォームを配置することにします。まずは T_予定 テーブルをソースに指定して、オートフォーム: 単票形式 でフォームを作成します。それをデザインビューで下記のようにレイアウトを変更します。(「日付」は削除します。)プロパティで「規定のビュー」を「帳票フォーム」に変更します。

FrmCalendar10.png

これを「F_予定」と名前を付けて保存して閉じます。F_Calendarフォームをデザインビューで開き「F_予定」をデータベースウィンドウからドラッグしてカレンダーの横にドロップします。

FrmCalendar11.png

サブフォームコントロールをクリックして、リンク親フィールド、リンク子フィールドを下記のように設定します。

プロパティ 設定値
リンク子フィールド 日付
リンク親フィールド txtDate

txtDate は前回作成した日付表示用のテキストボックスです。このtxtDate のプロパティを下記のように設定します。

プロパティ 設定値
書式 yyyy/mm/dd"の予定"
編集ロック はい

これでサブフォームにカレンダーで選択した詳細データが表示できて、更新、新規入力も可能になります。

FrmCalendar12.png

サブフォームで更新や追加、削除したときにカレンダーにその結果を反映させるためにサブフォームのフォームモジュールに下記のイベントプロシージャを作成します。SetScheduleをPublic宣言したのはサブフォームから呼び出す必要があったためでした。

以上で、とりあえずカレンダー形式スケジュール管理フォームは完成です。ただし、あくまで、ひな形ですので、実用的なものにするには、テーブルに格納するデータ、ユーザーインタフェイス等を、各自で検討、工夫してください。

次回、キーボードで操作できる機能を追加します。
カレンダー形式のスケジュール管理フォーム作成 その4

サンプルファイルが下記からダウンロードできます。
FrmCalendar_07.zip (Access 2007-2010 形式 - 42kb)
FrmCalendar.zip (Access 2002-2003 形式 - 52kb)
FrmCalendar_2k.zip (Access 2000 形式 - 50kb)

拍手する

123 Comments

しょうた says..."既存のスケジュールと組み合わせてみたのですが"

このBLOGには非常に参考になり有用な情報やTIPSが多数あり、とても参考になっております。

今回こちらのカレンダースケジュールを一通り(ほぼコピーですが)実験してみてとても気に入り、私の既存の顧客予約スケジュールのシステムと組み合わせてみようと思ったのですが、以下のところでつまずいております。

既存のテーブルは
[T_業務マスター]
・予約ID(オートNo、KEY)
・予約日時(日時型)
・顧客名(テキスト)
・予約内容(テキスト)

'予定表示プロシージャ
Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset
For i = 1 To 42
Me("T" & i).Caption = ""
Next
Set rs = CurrentDb.OpenRecordset( _
"SELECT 予約日時, 顧客名 FROM T_業務マスター WHERE " & "予約日時>#" & FirstDay & "# AND 予約日時<=#" & FirstDay + 42 & "#", dbOpenForwardOnly, dbReadOnly)
Do Until rs.EOF
With Me("T" & rs!予約日時 - FirstDay) '←この行で型が一致しませんとエラーが出てしまいます。
.Caption = .Caption & rs!顧客名 & vbCrLf & vbCrLf
End With
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
End Sub

もしよろしければ運用のアドバイスをいただければと思います。

2009.12.08 01:01 | URL | #K29erz/Y [edit]
hatena says...""

しょうた 様、はじめまして。
フォームモジュールの先頭で FirstDay は宣言してますでしょうか。

Option Compare Database
Option Explicit
Dim FirstDay As Date

また、予約日時 は日付だけを入力されてますか。時刻まで入ってませんか。

2009.12.08 12:21 | URL | #5uE6dEgY [edit]
しょうた says..."ありがとうございます"

お返事ありがとうございます。
おっしゃる通り予約日時のテーブルプロパティーがテキスト型になっておりました。

修正したところ無事に表示されました。

いろいろ応用して使えるよう頑張ります。

2009.12.08 13:02 | URL | #K29erz/Y [edit]
しょうた says..."たびたびコメントすみません。"

前回のコメントではアドバイスありがとうございます。
このカレンダーフォームを月曜日始まりに変更しようと思うのですが、可能でしょうか?

全く方法が見当つかずです。
'カレンダー 日にち設定関数 のあたりの変更で対応可能でしょうか?

2009.12.10 14:19 | URL | #K29erz/Y [edit]
hatena says...""

カレンダー 日にち設定関数 の9行目に下記の赤字部分を追加すればOKです。

FirstDay = FirstDay - Weekday(FirstDay, vbMonday)

曜日のラベルは手で変更してください。

2009.12.10 19:48 | URL | #5uE6dEgY [edit]
しょうた says...""

ありがとうございます。
ばっちりできました。もっと難しく考えてしまってました。

2009.12.10 22:16 | URL | #K29erz/Y [edit]
はな says..."教えてください。"

こんにちは、スケジュール管理フォームとても参考になっています。

質問を一つ聞きたいのですが、テーブルに件名と日付の入力をできるだけ少なくしたいので、フィールド『件名』『日付No』のみにして、『日付No』に"1"と入力されれば、各月の1日に"○"が入る様にしたいです。

参考までに、僕が作った予定表示プロシージャを見てください。

'予定表示プロシージャ
Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset, I_Date As Date

For i = 1 To 42
Me("J_I" & i).Caption = "" '予定表示ラベル
Next

Set rs = CurrentDb.OpenRecordset( _
"SELECT ,開始日,終了日,日付No FROM T_日付定期イベント ", _
dbOpenForwardOnly, dbReadOnly)

Do Until rs.EOF
I_Date = Format(txtDate.Value, "yyyy/mm/") & rs!日付No
With Me("J_I" & I_Date - FirstDay)
If .Caption = "" And I_Date < rs!終了日 And I_Date >= rs!開始日 Then
.Caption = "○"
End If
rs.MoveNext
End With
Loop
rs.Close: Set rs = Nothing
End Sub

上記のコードだと、例えばひとつのカレンダーに1日が2つ存在した時、最初の1日にしか"○"は入りません。これを両方とも"○"が入る様に設定したいです。
よろしくお願いします。

2011.04.15 14:27 | URL | #- [edit]
hatena says..."Re:教えてください。"

下記のコードでどうでしょうか。
動作確認はしていないので、ミスがあるかも知れませんが。

Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset, I_Date As Date

  Set rs = CurrentDb.OpenRecordset( _
  "SELECT ,開始日,終了日,日付No FROM T_日付定期イベント ", _
  dbOpenSnapshot, dbReadOnly)

  For i = 1 To 42
    I_Date = FirstDay + i
    rs.FindFirst "日付No=" & Day(I_Date)
    If rs.NoMatch Then
      Me("J_I" & i).Caption = "" '予定表示ラベル
    ElseIf I_Date < rs!終了日 And I_Date >= rs!開始日 Then
      Me("J_I" & i).Caption = "○"
    Else
      Me("J_I" & i).Caption = ""
    End If
  Next

  rs.Close: Set rs = Nothing
End Sub

2011.04.15 17:10 | URL | #5uE6dEgY [edit]
はな says...""

ありがとうございます。
エラーも無くできました。

2011.04.15 18:00 | URL | #- [edit]
はな says..."もう一つお願いします"

実は、予定表示ラベルを1日あたり2つずつ用意してまして・・・
フィールドの『店舗』が"自店"だったら"J_I" & iのラベルに"○"を、"他店"だったら、"T_I" & iのラベルに"○"を表示させるようにしたいです。

そこで、
一つ目を"自店"、2つ目を"他店"で設定して以下のコードにしてみました。

For i = 1 To 42
If rs!店舗 = "自店" Then
I_Date = FirstDay + i
rs.FindFirst "日付No=" & Day(I_Date)
If rs.NoMatch Then
Me("J_I" & i).Caption = ""
ElseIf I_Date < rs!終了日 And I_Date >= rs!開始日 Then
Me("J_I" & i).Caption = "○"
Else
Me("J_I" & i).Caption = ""
End If
ElseIf rs!店舗 = "他店" Then
I_Date = FirstDay + i
rs.FindFirst "日付No=" & Day(I_Date)
If rs.NoMatch Then
Me("T_I" & i).Caption = ""
ElseIf I_Date < rs!終了日 And I_Date >= rs!開始日 Then
Me("T_I" & i).Caption = "○"
Else
Me("T_I" & i).Caption = ""
End If
End If
Next
この様に、Ifで表示場所を指定しようとしたんですが、全部"自店"の扱いでカレンダーに表示されてしました。

よろしくお願いします。

2011.04.15 18:20 | URL | #- [edit]
hatena says..."Re:もう一つお願いします"

rs!店舗 = "自店" の条件を入れる場所が違いますね。
先に、rs.FindFirst "日付No=" & Day(I_Date) で目的のレコードに移動しておかないと、
常に先頭のレコードで比較してしまいます。

For i = 1 To 42
  Me("J_I" & i).Caption = "" '先に初期化しておく
  Me("T_I" & i).Caption = ""
  I_Date = FirstDay + i
  rs.FindFirst "日付No=" & Day(I_Date) '日付No を検索
  If rs.NoMatch Then '見つからなければ何もしない
  ElseIf I_Date < rs!終了日 And I_Date >= rs!開始日 Then '期間内なら
    If rs!店舗 = "自店" Then
      Me("J_I" & i).Caption = "○"
    ElseIf rs!店舗 = "他店" Then
      Me("T_I" & i).Caption = "○"
    End If
  End If
Next

動作未確認です。

2011.04.15 19:15 | URL | #5uE6dEgY [edit]
はな says...""

ありがとうございます。
無事完成です^^

2011.04.16 10:15 | URL | #- [edit]
はな says..."曜日の場合は・・・"

いつもありがとうございます。
今度は、新たにテーブル『T_曜日定期イベント』を設置します。
フィールドは、『店舗』『開始日』『終了日』『曜日No』『週No』とします。
『曜日No』は日曜日~土曜日:0~6
『週No』は第何何曜日かをしめします。
例えば『曜日No』= 3、『週No』= 4、の時には第4火曜日ということになり、第4火曜日に該当する予定表示ラベルに"○"を表示させたいです。

一つのカレンダーフォームで、テーブル『T_日付定期イベント』『T_曜日定期イベント』を表示させたいので、ご指導よろしくお願いします。

2011.04.16 11:55 | URL | #- [edit]
hatena says..."Re:曜日の場合は・・・"

> 『曜日No』は日曜日~土曜日:0~6

曜日はWeekday関数で求められます。ただし、日曜日~土曜日:1~7 なので、
WeekDay(I_Date)-1

> 『週No』は第何何曜日かをしめします。

その月で何回目の曜日かを取得する式は、

(Day(I_Date)+6) \ 7

ですね。(\演算子は整数除算です。)
『T_曜日定期イベント』もOpenRecordsetしておいて、上記の式の結果から生成した抽出条件式でFindFirstして、該当するレコードがあるかどうか調べればいいでしょう。

とりあえず、ここまでのヒントで、コーディングにトライしてみてください。
もし、うまくいかなかったら、できたところまでのコードをご提示くだされば、手直しのアドバイスをさせていただきます。

2011.04.16 12:48 | URL | #5uE6dEgY [edit]
はな says...""

ありがとうございます、できました。
以下のコードでやりましたが、もっと効率の良い方法ありますか?

For i = 1 To 42
I_Date = FirstDay + i
rs.FindFirst "曜日No=" & Weekday(I_Date) - 1 & "AND 週No=" & (Day(I_Date) + 6) \ 7
If rs.NoMatch Then
ElseIf I_Date < rs!終了日 And I_Date >= rs!開始日 Then
If rs!店舗 = "自店" Then
Me("J_I" & i).Caption = "○"
ElseIf rs!店舗 = "他店" Then
Me("T_I" & i).Caption = "○"
End If
End If
Next

2011.04.16 14:01 | URL | #- [edit]
hatena says..."Re:"

単独のコードとしては問題ないと思います。

ただ、前回までのコードと同時に使っているなら、一つのループにまとめた方が効率的だとは思いますが、わずかの差ですので、気にすることはないと思います。

2011.04.18 10:14 | URL | #5uE6dEgY [edit]
はな says..."サブフォームに関して"

こんにちは。
以前『日付No』『曜日No』『週No』とした時の表示の仕方について質問した者ですが。

『日付No』『曜日No』『週No』に該当するイベントを全て表示させるには、ひとつのサブフォームでは無理でしょうか?

2011.04.20 14:18 | URL | #- [edit]
hatena says..."Re:サブフォームに関して"

イベントのテーブルが2つあるのですね。

ユニオンクエリで一つに結合できますので、それをサブフォームのレコードソースにすればいいでしょう。
ただし、編集は出来なくなるので、編集用のフォームを別に用意する必用がありますね。

2011.04.20 15:10 | URL | #5uE6dEgY [edit]
はな says..."サブフォームに関して"

回答ありがとうございます。
イベントのテーブルは1つなんですけど、
イベントの日程を指定するフィールドが『日付No』『曜日No』『週No』の3つがありまして、
『日付No』の数値は、毎月その数値の日にちに開催される事を意味し、
『曜日No』『週No』はセットで、第何曜日に開催される事を意味するので、イベントそれぞれが、日程を求める方法が違うんです。
その為、サブフォームのリンク子フィールドを『日付No』にすると日付の定期イベントは表示されて、曜日の定期イベントは表示されないという事態に陥ってしまいました。

リンク親フィールド、リンク子フィールドは複数の条件を入れたりとかできますか?

2011.04.20 16:22 | URL | #- [edit]
数馬 says..."はじめまして"

いつもHPを拝見させていただいております。
とても参考になるコンテンツばかりでAcessで作業をするときに参考によく使わせていただいております。
このたびスケジュール管理ツールを作ろうと思いまして参考にさせていただいております。
質問なのですが、スケジュールテーブル以外に、行事名、曜日、月末、月初のデフォルトテーブルを作っておき、チェックが入った箇所(曜日や月末、月初など)の日程に毎月カレンダーに表示されるようには出来るでしょうか?
上の方のものとよく似ていますが、可能ならばスケジュールテーブルの方には日付、行事名で保存できるようにしたいのですが、無理を言って申し訳ありません。

2011.05.22 19:37 | URL | #COVj8X2A [edit]
hatena says..."Re:はじめまして"

> (曜日や月末、月初など)の日程に毎月カレンダーに表示されるようには出来るでしょうか?

上の方の質問とほとんど同じなので、ちょっと改造すれば可能だと思います。

ちょっと今、まとまった時間がとれないので、ヒントだけ。

月初めは、

DateSerial([年],[月],1)

月末は、

DateSerial([年],[月]+1,0)

という式で計算できます。

ある日付の曜日は Weeekday関数で取得できます。

2011/04/15(金) 17:10:00 の私のコメントのコードの条件判断に上記の値を使用して、行事を表示するようにすればいいかと思います。

> 可能ならばスケジュールテーブルの方には日付、行事名で保存できるようにしたいのですが、

カレンダーに行事名を表示すると同時に、スケジュールテーブルにはそのデータを追加するコードを記述すればいいでしょう。

2011.05.23 12:32 | URL | #5uE6dEgY [edit]
数馬 says..."Re:はじめまして"

お忙しい中、回答ありがとうございます。
頂いたヒントを元にがんばってみます。
不明な点があれば、申し訳ありませんが、また質問に来ると思いますが、よろしくお願いします。

2011.05.23 20:51 | URL | #COVj8X2A [edit]
数馬 says..."質問です。"

上の質問をしたものですが、
2011/04/15(金) 17:10:00 の回答を元に改良しようとやってみたのですが
rs.FindFirst "日付No=" & Day(I_Date)の所で無効な処理ですと表示されます。
おそらく日付でリンクさせたサブフォームとカレンダーフォームの為ではないかと思うのですが、いろいろ試しても直りません。
どのように変更すればいいのでしょうか?

2011.05.27 10:15 | URL | #COVj8X2A [edit]
hatena says..."re: 質問です。"

> rs.FindFirst "日付No=" & Day(I_Date)の所で無効な処理ですと表示されます。

一部だけでは原因は分からないので、全部のコードをご提示ください。

2011.05.29 08:14 | URL | #5uE6dEgY [edit]
数馬 says..."re: 質問です。"

申し訳ありません。

2011/04/15(金) 17:10:00 の回答を元に開始日と終了日をはずし、とりあえず動作を確認しようと動かしてみました。
ところ上記エラーが発生しました。
何分あまり詳しくないので申し訳ありません。

Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset, I_Date As Date

  Set rs = CurrentDb.OpenRecordset( _
  "SELECT 日付No FROM T_予定 ", dbOpenSnapshot, dbReadOnly)

  For i = 1 To 42
    I_Date = FirstDay + i
    rs.FindFirst "日付No=" & Day(I_Date)
    If rs.NoMatch Then
      Me("J_I" & i).Caption = "" '予定表示ラベル
    Else
      Me("J_I" & i).Caption = "○"
    End If
  Next
  rs.Close: Set rs = Nothing
End Sub

2011.05.29 09:30 | URL | #COVj8X2A [edit]
はてな says..."re: 質問です。"

提示されたコードを見る限りは、エラーとなる箇所は見つかりません。

他の部分のコード、テーブル構成など、総合的にみてみないと原因の特定は難しそうです。

このページの上部のナビゲーションのBBSから、掲示板に行けますので、そこでなら、ファイルをアップロードできますので、現状のファイルをアップロードしてもらえれば、間違いを指摘できるかもしれません。

2011.06.03 15:29 | URL | #5uE6dEgY [edit]
数馬 says..."あとがとうございます"

時間が掛かりましたが、問題が解決できました。
本当にありがとうございます。

もうひとつだけ申し訳ありません
質問なのですが、カレンダーで日付で検索しているわけですが、処理名を新たに検索条件に組み込めないでしょうか?

別のフォームで JOBNANME に処理名を変数として入力し、カレンダーーフォームを開いた際に、処理名でフィルターをしたいのですがうまくいきません。

'予定表示プロシージャ
Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset, I_Date As Date

For i = 1 To 42
Me("T" & i).Caption = ""
Next
Set rs = CurrentDb.OpenRecordset( _
"SELECT 日付, 件名 FROM T_予定 WHERE " & _
"件名='" & JOBNAME & "'" & " AND 日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#", _
dbOpenForwardOnly, dbReadOnly)

Do Until rs.EOF
With Me("T" & rs!日付 - FirstDay)
.Caption = .Caption & "○" & vbCrLf & vbCrLf
End With
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
End Sub

構文エラー演算子がありません。と言う表示になります。
たびたび申し訳ありません

2011.06.15 23:11 | URL | #COVj8X2A [edit]
hatena says..."全角空白"

下記のANDの前後が全角空白になってますので、これを半角空白に置き換えてください。

"件名='" & JOBNAME & "'" & " AND 日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#"

2011.06.15 23:31 | URL | #5uE6dEgY [edit]
はな says..."教えてください。"

こんにちは。
2011年4月15日に質問した内容で、1日あたり2つ予定表示ラベルがある場合についてなんですが。

If rs!店舗種類 = "自店" Then
 Me("J_I" & i).Caption = "○"
ElseIf rs!店舗種類 = "他店" Then
 Me("T_I" & i).Caption = "○"
End If

上記のコードを教えて頂いたのですが、最近になってバグを発見したので解決法を教えてください。

『店舗種類』の'自店'と'他店'共に同じ日にイベントがある場合、上記のコードだと'自店'の専用ラベルにしか『○』が表示されません。これを'自店'と'他店'の両方の専用ラベルに『○』を表示させるにはどうすれば良いでしょうか?

2011.06.16 18:15 | URL | #- [edit]
hatena says..."re: 教えてください。"

はなさん、こんばんは。
下記のコードでどうでしょうか。

For i = 1 To 42
  Me("J_I" & i).Caption = "" '先に初期化しておく
  Me("T_I" & i).Caption = ""
  I_Date = FirstDay + i
  rs.FindFirst "日付No=" & Day(I_Date) & " AND 店舗='自店'"
  If rs.NoMatch Then '見つからなければ何もしない
  ElseIf I_Date < rs!終了日 And I_Date >= rs!開始日 Then '期間内なら
    Me("J_I" & i).Caption = "○"
  End If
  rs.FindFirst "日付No=" & Day(I_Date) & " AND 店舗='他店'"
  If rs.NoMatch Then '見つからなければ何もしない
  ElseIf I_Date < rs!終了日 And I_Date >= rs!開始日 Then '期間内なら
    Me("T_I" & i).Caption = "○"
  End If
Next

2011.06.16 23:39 | URL | #5uE6dEgY [edit]
はな says..."ありがとうございます。"

確認遅れました。
無事完成です。

2011.06.23 15:02 | URL | #- [edit]
はな says...""

こんにちは、
カレンダーを表示させるだけACCESSファイルと
イベント情報を格納させるACCESSファイルに分けたいのですが、何か良い方法ないでしょうか?

サイトマップの○○を参考にとかでも良いので教えてください。

2011.07.01 12:08 | URL | #- [edit]
hatena says..."ファイルを分ける?"

MDB(Accdb)ファイルを分けたいと言うことでしょうか。

カレンダーフォームのあるMDBファイルから、イベント情報をリンクテーブルとして参照すればいいでは。

2011.07.03 00:13 | URL | #5uE6dEgY [edit]
仕事で使ってます says..."カレンダーに表示される件名"

カレンダーに表示される件名の間に、1行分 すき間がありますが、

件名が増えると表示されなくなってしまいます。

どうしたらいいですか?

2011.07.11 20:05 | URL | #- [edit]
hatena says..."re:カレンダーに表示される件名"

'予定表示プロシージャ
Public Sub SetSchedule()


      .Caption = .Caption & rs!件名 & vbCrLf & vbCrLf
の1行を、


      .Caption = .Caption & rs!件名 & vbCrLf

に変更してみてください。

これがご希望のことですか。

2011.07.11 21:38 | URL | #5uE6dEgY [edit]
nomadex says..."カレンダーに表示される件名"

本当にすみません。
列を7列→1列にした際に、列のサイズをそのままにしていた
ため、表示されていないと勘違いしていました。
実際は、実寸のチェックが出来ていなかった事が原因でした。
ちゃんと横並びに件名が表示されました。
本当にすみませんでした。

2011.07.12 00:08 | URL | #t18uTLdg [edit]
カレンダーに表示される件名 says...""

.Caption = .Caption & rs!件名 & vbCrLf

に変更したらうまくいきました。有難うございます。

2011.07.12 12:40 | URL | #- [edit]
けいすけ says..."色分けの方法"

カレンダーのような予定票を組み込めないかと探してたら、ここにたどり着きました。VBAは全くの素人です。それでも何とか組み込めないか努力し、何とか動いています。それで一つだけ、カレンダーの中に表示される、文字列の色分けができないかと思っています。
 HATENAさんのプルグラムで言えば、件名と予定内容の文字列の色分け表示できると良いことになるのですが、おそらくどこかにあるプログラムを入れたらいいのでしょう。
 どうぞよろしくお願いします。
 

2012.02.18 16:29 | URL | #aWRRKhxI [edit]
hatena says..."re: 色分けの方法"

> 件名と予定内容の文字列の色分け表示できると良いことになるのですが、

テキストボックスの「前景色」プロパティで指定するのではダメですか?

2012.02.19 16:51 | URL | #5uE6dEgY [edit]
けいすけ says..."re:色分け"

早々に、すみません。お返事ありがとうござます。
少し、情報不足であったのと、テキストボックスの「前景色」については、私が理解できていないのか、カレンダーの中の文字全てが同じ色になってしまうか、または、カレンダー右のサブフォームのテキストボックスだけが同じ色になってしまいます。私がうまくやれていないのかもしれませんが、カレンダーの中の文字が色分けできて、見やすくできないかと思っているのです。

現状は、分からないなりにもVBAを読み込んだところ、

 予定表示プロシージャ(一部省略)の

  "SELECT 日付, 件名 FROM T_予定 WHERE " & _

  の部分で、

 T_予定 を他のクエリに入れ換えると、他のフォームで入力したデータが、表示されるようになることが分かったので、他のフォームから入力したデータがクエリを通して、表示されるようになっています。
 

 ついては、現在、
 "SELECT 日付, 件名 FROM Q_カレンダー WHERE " & _
 
  となっています。

  
 このように、他のクエリからデータを持ってきているので、
 勝手に、VBAのどこかで、日付は赤色、件名は青色というようなプログラムが必要なのかなと思いました。
 
  
 

2012.02.19 20:56 | URL | #aWRRKhxI [edit]
hatena says..."re:色分け"

まずは、やりたいことをもう少し具体的に。

文字色を変更したいのは、
カレンダー部分の日付と件名ですか。
それとも、サブフォーム部分の 件名 と予定内容ですか。

また、すべて同じ色ではダメなようですが、
どのような条件で色が変わるようにしたいのでしょうか。

2012.02.20 12:59 | URL | #5uE6dEgY [edit]
けいすけ says..."私が錯綜しておりました"

大変申し訳ありません。
カレンダー内で色分け表示ができないかと思っていたいことは確かなのですが、そもそも、カレンダー内には「件名」しか表示されないのに、色々やっているうちに「予定内容」も表示されるものだと思い込み、ついては、「件名」と「予定内容」が、カレンダー内で色分けされて表示できないかと、思考を錯綜させてしてしまっておりました。

やりたいことがうまく書けるか心配なのですが、

 現在、Q_カレンダーというクエリの「件名」は三つのフィールド名を結合させており、

 件名:[予約] & " " & Format([時間],"時刻 (S)") & " " & [氏名]

となっています。、例えば、1月1日の、Q_カレンダー内の「件名」には、二つのレコードがあるので、以下のように

カレンダー内に表示されます。

   確定 09:30 ○○○○
   継続 10:30 ○○○○

 この二つのレコード内の、確定という文字の場合だけ、赤で表示できないかと思ったのです。

 そもそも、件名と予定内容の色分けではなくて、
 「件名」に表示される文字の中で、確定という文字があるレコードの場合は赤にしたかったということです。

確か、   "SELECT 日付, 件名 FROM T_予定 WHERE " & _  の 件名の前に、
「時刻」と入れて、次のようにすると  "SELECT 日付, 時刻 件名 FROM T_予定 WHERE " & _

 カレンダー内は、「時刻」と「件名」が二段になって、表示されるようになると、記憶しています。
 この場合だと、「時刻」と「件名」の二段の間隔が広く、あまり情報が入れられなくなってしまうのですが、この二段の方法で色分けされるのも良いかなと思っているうちに、錯綜してしまいました。

 やりたいことがうまく書けたか自信がありません。
 後者の2段の方でもかまいませんので、アドバイスをいただければ幸いです。

2012.02.21 21:24 | URL | #aWRRKhxI [edit]
hatena says...""

   確定 09:30 ○○○○
   継続 10:30 ○○○○

上記の場合は、1行目のみ赤字にしたいということでしょうか。
もし、そうなら、現在のフォームレイアウトでは無理です。
フォームを一から作り直しです。
2行とも赤字でいいのなら、コードを少し変更するだけです。

どちらでしょう。

2012.02.22 10:17 | URL | #5uE6dEgY [edit]
けいすけ says..."ありがとうございました。"

前記については、
一行目だけ、赤色にしたいということでした。
正確には、「確定」と言う文字がある行のみ、赤色にしたい と言うことなのですが、

色々整理されないままの問い合わせで、申し訳ありませんでした。

それにしても、HATENAさんのカレンダーは私のDBでとても有益に動いており、大変助かっています。

少しでも腕が上がるよう、私自信も頑張りたいと思います。

ありがとうございました。



2012.02.22 20:53 | URL | #aWRRKhxI [edit]
hatena says..."re: ありがとうございました。"

> 一行目だけ、赤色にしたいということでした。
> 正確には、「確定」と言う文字がある行のみ、赤色にしたい と言うことなのですが、

サンプルでは、1つのラベルに1日分の件名を改行で入れていますが、一つのラベルでは1行目だけというように一部分だけ文字色を変えることはできません。

ですので、ご希望のことを実現するには、現在は1日辺り一つのラベルに件名を書き込んでいますが、1日分当たり1行のラベルを複数枚配置するように変更する必要がありますね。

2012.02.22 22:01 | URL | #5uE6dEgY [edit]
資材まん says..."教えてください"

Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset
の部分がコンパイルエラー:ユーザー定義型は定義されていませんと表示されます

2012.04.27 10:06 | URL | #- [edit]
hatena says..."re:教えてください"

参照設定で DAO にチェックを入れてください。

下記をご参考に
http://www.accessclub.jp/actips/tips_32.htm

2012.04.27 12:37 | URL | #5uE6dEgY [edit]
資材まん says..."先程はありがとうございました"

たびたびすいません。

リンクをさせようとリンク親とリンク子を設定しようとしたのですが、非連結フォームに連結はできませんと表示されてしまいます。

どこかでまた設定しなくてはいけないのでしょうか?

2012.04.27 15:46 | URL | #- [edit]
資材まん says..."なんとかできました"

すいません。
自力でなんとかできました。

また、わからないときは質問させていただきますが、できる限り自力でがんばりますのでよろしくお願いします

2012.04.27 16:58 | URL | #- [edit]
けえ says..."SQLサーバーを使っています"

いつも参考にさせて頂いています。
「その2」までできていたのですが…。

環境:ACCESS2003・MSDE
ADPで作成しているのですが、DAOではなくADO接続でも
予定表示プロシージャは作成可能でしょうか。
今までストアドばかりでごまかして来てしまっていたので
VBAはズブの素人ですが、hatenaさんのコードを見ながら
必死で勉強しています。アドバイス宜しくお願い致します。

2012.06.25 18:41 | URL | #Qb.LH/c2 [edit]
hatena says..."re:SQLサーバーを使っています"

> ADPで作成しているのですが、DAOではなくADO接続でも
> 予定表示プロシージャは作成可能でしょうか。

実際に確認したわけではないですが、
当然可能だと思います。

2012.06.25 18:59 | URL | #5uE6dEgY [edit]
けえ says..."ありがとうございます"

今晩勉強して、また明日会社でがんばってみます!
ありがとうございました。
また何かあったら宜しくお願いします。

2012.06.25 19:14 | URL | #Qb.LH/c2 [edit]
けえ says...""

先日はありがとうございました。
現在、ADO接続に挑戦中です。
下記のコードでエラーは出ないのですが、
キャプションがカレンダーに反映されません。
またアドバイス頂ければと投稿しました。
宜しくお願い致します。

Public Sub SetSchedule()

Dim i As Integer
Dim Strsql As String

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset

For i = 1 To 42
Me("T" & i).Caption = ""
Next

Strsql = "SELECT [日付], [件名] FROM [00_スケジュール] WHERE " & _
"[日付]>" & FirstDay & " AND [日付]<=" & FirstDay + 42

rs.Open Strsql, cn

Do Until rs.EOF
With Me("T" & rs!日付 - FirstDay)
.Caption = .Caption & rs!件名 & vbCrLf & vbCrLf
End With
rs.MoveNext
Loop

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

End Sub

2012.06.27 18:36 | URL | #Qb.LH/c2 [edit]
けえ says..."すみません"

おはようございます。

単に日付をくくり忘れただけのつまらないミスでした。
無事反映することができました。
板汚しすみません。

2012.06.28 09:25 | URL | #Qb.LH/c2 [edit]
TF says..."すみません"

素人のTFです
予定時刻が変更した場合にカレンダー表示順番を
時刻順に変更したいのですがまったくわかりません?
アドバイスお願いします!

2012.07.21 22:55 | URL | #- [edit]
hatena says..."カレンダー表示順"

> 予定時刻が変更した場合にカレンダー表示順番を
> 時刻順に変更したいのですが

「F_予定」フォームを再クエリすればいいでしょう。

タイミングは「F_予定」フォームの更新後処理がいいかな。

Me.Requery

2012.07.22 00:05 | URL | #5uE6dEgY [edit]
TF says..."何度もすみません"

サンプルMDB をダウンロードして変更しようと思っています。
サブホームF_予定の表示はクエリの時間並べ替えで出来たのですが
サブフォームF_予定で時間更新や追加した場合
追加した順番でカレンダー(ラベル:T の表示)に表示されます
時間で並べ替えできませんか?
ちなみにまだAccess2000を使用中です

2012.07.22 06:46 | URL | #- [edit]
TF says..."ごめんなさい"

出来ました。FROM Q_予定(クエリ名に変更してなかったです)
またわからないことがあったらぜひ教えってください
ありがとうございました

2012.07.22 07:04 | URL | #- [edit]
もっちゃん says..."教えてください"

今回このカレンダーを利用して1日にとった食事を入力するフォームを作成しました。"SELECT 日付, 料理名 FROM 食事の記録 WHERE " & _としてカレンダーには料理名だけが表示されるようにしています。食事の記録のテーブルには日付、時間帯、料理名などが入力されています。時間帯というのは朝食、昼食、夕食です。今回質問させていただきたいのは、カレンダーに料理名が表示される際、朝食、昼食、夕食で文字の色を分けたいのですが可能でしょうか?ACCESSはほぼ初心者です。

2012.11.29 17:48 | URL | #btYe8I66 [edit]
hatena says..."re: 教えてください"

サンプルでは一つのテキストボックスに複数データを改行して入れていますが、一つのテキストボックス内で一部のみ色を変えることはできないので、朝食、昼食、夕食用の3つのテキストボックスを配置してそれぞれに代入することになりますね。

2012.11.30 12:04 | URL | #5uE6dEgY [edit]
もっちゃん says..."教えてください"

朝食、昼食、夕食の3つのテキストボックスをつくるまではなんとか出来ました。
あとは朝食は朝食のテキストボックスに表示というふうにしたいのですがなかなか出来ません。
予定プロシージャのところをどのように変えればよいのか教えていただけないでしょうか。

2012.12.03 19:01 | URL | #btYe8I66 [edit]
hatena says..."朝食、昼食、夕食の3つのテキストボックス"

各テキストボックス名が下記のようだとします。
朝食表示用 A1, A2・・・・A42
昼食表示用 B1, B2・・・・B42
昼食表示用 C1, C2・・・・C42


'予定表示プロシージャ
Public Sub SetSchedule()
Dim i As integer, rs As DAO.Recordset
  For i = 1 To 42
    Me("A" & i).Caption = ""
    Me("B" & i).Caption = ""
    Me("C" & i).Caption = ""
  Next
  Set rs = CurrentDb.OpenRecordset( _
    "SELECT 日付, 料理名, 時間帯 FROM T_予定 WHERE " & _
    "日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#", _
    dbOpenForwardOnly, dbReadOnly)
  Do Until rs.EOF
    Select Case rs!時間帯
    Case "朝食"
      Me("A" & rs!日付 - FirstDay).Caption = rs!料理名
    Case "昼食"
      Me("B" & rs!日付 - FirstDay).Caption = rs!料理名
    Case "夕食"
      Me("C" & rs!日付 - FirstDay).Caption = rs!料理名
    End Select
    rs.MoveNext
  Loop
  rs.Close: Set rs = Nothing
End Sub

2012.12.05 17:44 | URL | #5uE6dEgY [edit]
もっちゃん says..."ありがとうございます"

出来ました!!!
ご丁寧に説明してくださり本当にありがとうございました!!!

2012.12.06 13:48 | URL | #btYe8I66 [edit]
もっちゃん says..."すみません"

もう一度質問させてください。
さっき試してみたら、それぞれのテキストボックスに対して料理がひとつしか表示されませんでした。朝食を2品食べた場合後から入力したものが先に入力したものの上に上書きされてしまいます。料理をすべて表示するにはどのようにすればよいのでしょうか?

2012.12.06 15:18 | URL | #btYe8I66 [edit]
hatena says..."re: すみません"

カンマ区切りで表示するとして、下記のようにしてください。

'予定表示プロシージャ
Public Sub SetSchedule()
Dim i As integer, rs As DAO.Recordset
Dim X As String

  For i = 1 To 42
    Me("A" & i).Caption = ""
    Me("B" & i).Caption = ""
    Me("C" & i).Caption = ""
  Next
  Set rs = CurrentDb.OpenRecordset( _
    "SELECT 日付, 料理名, 時間帯 FROM T_予定 WHERE " & _
    "日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#", _
    dbOpenForwardOnly, dbReadOnly)
  Do Until rs.EOF
    Select Case rs!時間帯
    Case "朝食"
      X = "A"
    Case "昼食"
      X = "B"
    Case "夕食"
      X = "C"
    End Select
    With Me(X & rs!日付 - FirstDay)
     .Caption = Mid(.Caption & ", " & rs!料理名, 3)
    End With
    rs.MoveNext
  Loop
  rs.Close: Set rs = Nothing
End Sub

2012.12.06 16:50 | URL | #5uE6dEgY [edit]
もっちゃん says..."度々すみません"

カンマ区切りで表示されるようにはなったのですが、朝食のところに例えば、ごはん、味噌汁、アジの開き と順番に入力した場合、 ごはん→はん、味噌汁→ん、味噌汁、アジの開き という風に先に入力したものが少しづつ消えていくのですが、これを回避する方法はありますか?

2012.12.10 15:24 | URL | #btYe8I66 [edit]
hatena says..."re: 度々すみません"

勘違いをしてました(汗)。

     .Caption = Mid(.Caption & ", " & rs!料理名, 3)

のコードを下記に変更してください。

     IIf(.caption="", "", .caption & ", ") & rs!料理名

2012.12.10 17:40 | URL | #5uE6dEgY [edit]
もっちゃん says..."度々すみません"

2つ目の&のところにコンパイルエラー:補正候補:= と出てきてしまいます

2012.12.10 18:34 | URL | #btYe8I66 [edit]
hatena says...""

何度もすみません。下記のようにしてください。

     .Caption = IIf(.caption="", "", .caption & ", ") & rs!料理名

2012.12.10 19:07 | URL | #5uE6dEgY [edit]
もっちゃん says..."ありがとうございました!!"

ついに完成しました!何度も質問してしまいすみませんでした。丁寧に教えてくださり本当にありがとうございました!

2012.12.11 11:09 | URL | #btYe8I66 [edit]
カズ says..."質問お願いします"

Hateneさんにあるスケジュール管理を参考にして、スケジュール管理を作成していました。素人でどうしてもつまづいてしまいました。
And 件名 <> "車検"
の所でエラーが出てしまいます。件名の所で変数がないと出ます。この場合どこを書き換えたり、書き加えたりすれば良いのでしょうか?よろしくお願いします。

Dim i As Integer, rs As DAO.Recordset

For i = 1 To 42
Me("T" & i).Caption = ""
Next
Set rs = CurrentDb.OpenRecordset( _
"SELECT 日付, 件名, 社員 FROM T_予定 WHERE " & _
"日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#", _
dbOpenForwardOnly, dbReadOnly And 件名 <> "車検")
Do Until rs.EOF
With Me("T" & rs!日付 - FirstDay)
.Caption = .Caption & rs!社員
.Caption = .Caption & "/" & rs!件名 & vbCrLf
End With
rs.MoveNext
Loop
rs.Close: Set rs = Nothing

2013.01.12 04:22 | URL | #3XsS34Ow [edit]
カズ says..."件名の表示"

何度もすみません。よろしくお願いします。
カレンダーに表示される文字を条件によって色を変えたいです。
例えば、件名に納車と入力すると色は、青
車検と入力すると赤色に変わるようにしたいです。

この場合は、どのようにしたら良いでしょうか?よろしくお願いします。

2013.01.14 17:38 | URL | #3XsS34Ow [edit]
tsuyonuno says..."はじめまして 初歩的質問と思いますが間違いを教えていただいてもよろしいでしょうか?"

はじめまして。レベルが低い質問で申し訳ありません。下記で行き詰っており教えていただけないでしょうか?カレンダー型のdatabase作成してみようとあれこれ探し、貴サイトにいきつき、勉強しながらこのページのその3まですすんできました。大変お世話になっております。その2まではうまく動いていました。

①その3で、”F_予定”のフォームを作成、F_Calendarフォームにドラッグしてこのフォームコントロールを開いても、リンク親フィールド、リンク子フィールドの項目がでてきません。

②そこでツールボックスからサブフォームを作成する手順で”F_予定”を”F_Calendar”に貼り付けてリンク子・親フィールドを設定してみると下記エラーが出てしまいます。

*次のように自分のdatabase用に定義を変更しております。
 T_予定 → T手術一覧
 日付  → 手術日
 件名  → 患者氏名

 VBAそのものはこのページのものをそのまま引用させていただいて、上記定義変更した箇所だけをそっくり変更しているだけです。
 すると、

↓ F_Calendarのモジュールの一部です

'予定表示プロシージャ
Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset ←ユーザー定義型は定義されておりません とエラーになってしまいます。
For i = 1 To 42
Me("T" & i).Caption = ""
Next
Set rs = CurrentDb.OpenRecordset( _
"SELECT 手術日, 患者氏名 FROM T手術一覧 WHERE " & _
"手術日>#" & FirstDay & "# AND 手術日<=#" & FirstDay + 42 & "#", _
dbOpenForwardOnly, dbReadOnly)

Do Until rs.EOF
With Me("T" & rs!手術日 - FirstDay)
.Caption = .Caption & rs!患者氏名 & vbCrLf

End With
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
End Sub

★まず上記解決方法ごご教授いただいてもよろしいでしょうか?

★また、本ページではカレンダー日付枠内には”件名”のみが表示されております。これを、自分で作成したテーブルから複数のデータを表示するにはどうすればよろしいでしょうか?具体的には次のとおりです。

 テーブル”T手術一覧”のデータである”患者氏名”と”術式”の二つを カレンダー内 一つの日付枠内に

 山田太郎
  クリッピング術
 鈴木花子
  腫瘍摘出術
   ・
   ・
のように表示する

何卒よろしくお願い申し上げます。

2013.01.24 13:31 | URL | #STqnFH/w [edit]
tsuyonuno says..."2013/1/24 に質問させていただきました者です"

二つのご質問のうち、ADOをDAOに設定変更したらうまくいきました。お騒がせいたしました。
二つ目の質問は現在自己努力中です。

2013.01.29 10:41 | URL | #- [edit]
tsuyonuno says...""

1/24にコメント投稿させていただいたものです。
解決できました!!お手を煩わさずに済んでよかったです。失礼いたします。

2013.02.06 13:34 | URL | #- [edit]
hatena says..."re: 質問お願いします by カズ様"

カズ様、遅いレスで申し訳ありません。見てないかもしれませんが、一応回答しておきます。
「And 件名 <> "車検"」を記述する場所が違っています。下記のように変更してください。

Set rs = CurrentDb.OpenRecordset( _
"SELECT 日付, 件名, 社員 FROM T_予定 WHERE " & _
"日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#" & _
" And 件名 <> '車検'", _
dbOpenForwardOnly, dbReadOnly)

2013.04.07 16:18 | URL | #5uE6dEgY [edit]
hatena says..."re: 件名の表示 by カズ様"

下記のコードを追加してください。

With Me("T" & rs!日付 - FirstDay)
.Caption = .Caption & rs!社員
.Caption = .Caption & "/" & rs!件名 & vbCrLf
If .Caption Like "*納車*" Then
  .ForeColor = vbBlue
ElseIf .Caption Like "*車検*" Then
  .ForeColor = vbRed
Else
  .ForeColor = vbBlack
End iF

End With

ただし、一日に複数件の予定がある場合、すべての予定が同じ色になります。
これは、ひとつのラベル内で部分的に色を変えることはできないので。

2013.04.07 16:30 | URL | #5uE6dEgY [edit]
kkk says..."リンク親フィールド、子フィールドの設定なのですが"

リンク親フィールドのところにtxtDateを設定できないのですが原因が全く分かりません。
なにか他に設定が必要なのでしょうか?

ご回答よろしくお願いします。

2013.12.04 22:21 | URL | #- [edit]
hatena says..."re:リンク親フィールド、子フィールドの設定なのですが"

> リンク親フィールドのところにtxtDateを設定できないのですが原因が全く分かりません。
> なにか他に設定が必要なのでしょうか?

設定できないとは、具体的にどのような状態でしょうか。

設定してもリンクが動作しないのか、それとも設定自体ができないということでしょうか。

「リンク親フィールド」プロパティ欄に直接、txtDate と入力するだけなんですが、できないですか。

2013.12.05 11:47 | URL | #5uE6dEgY [edit]
kkk says...""

コメントさせてもっらたあとにすぐできました。
手間をかけさせてしまってすいません。

回答ありがとうございました。

2013.12.05 13:28 | URL | #- [edit]
igachan says..."定期イベントの自動入力"

お世話になっております。サンプルを改良して使わせて頂いております。現状、サンプルのまま使わせて頂いております。各欄への入力は問題なく動作はしております。
 そこで、① 毎月行う定例行事・・・毎月1日 13:00から 課内会議
     ② 毎年行う定例行事・・・4/1 17:00 新入社員歓迎会
                  8/25 17:00 納涼祭 という記事を「時刻」と「件名」欄に自動で入れらればと思い、①テーブル「毎月の行事」②テーブル「毎年の行事」を作り、それぞれのテーブルに「日付」「時刻」「行事名」のフィールドを作ってみたのですが・・・どうつなげて良いのかわからなくなってしまいました。良いやり方がありましたらご教授願えればと思います。

2014.04.08 01:24 | URL | #- [edit]
hatena says..."re:定期イベントの自動入力"

>  そこで、① 毎月行う定例行事・・・毎月1日 13:00から 課内会議
>      ② 毎年行う定例行事・・・4/1 17:00 新入社員歓迎会
>                   8/25 17:00 納涼祭 という記事を「時刻」と「件名」欄に自動で入れらればと思い、①テーブル「毎月の行事」②テーブル「毎年の行事」を作り、それぞれのテーブルに「日付」「時刻」「行事名」のフィールドを作ってみたのですが・・・どうつなげて良いのかわからなくなってしまいました。良いやり方がありましたらご教授願えればと思います。

①テーブル「毎月の行事」のフィールドは、

日 数値型
時刻 日付/時刻型
行事名 テキスト型

として、月を移動したタイミングで、
T_予定 テーブルに該当レコードがあるかチェックして、
なければ追加するというコードを追加する、

という設計にするかな。

「毎年の行事」は、
月 数値型
日 数値型
時刻 日付/時刻型
行事名 テキスト型

としてやはり同じようなVBAコードを追加します。

2014.04.09 00:28 | URL | #5uE6dEgY [edit]
igachan says...""

ありがとうございます。
テキストボックス「月」の更新後処理に
①はフォームのtxtdateから年と月を取り出してテーブル「毎月の行事」のフィールド「日」をたしたものをSQL文でクエリ(件名含む)として作成して「T_予定テーブル」の「日付」「件名」でチェックさせるという考え方でよろしいのでしょうか?まだ書き方までたどり着きませんが・・・

2014.04.09 16:36 | URL | #- [edit]
igachan says..."Re:定期イベントの自動入力"

hatenaさん、お世話になっております。一晩考えたのですがVBA初心者の渡しにとっては難易度が高すぎるようで構文の書き方に苦しんでおります。構文を教えて頂くことは可能ですか?もし、可能でしたらお願いしたいのですが・・・

2014.04.10 16:50 | URL | #- [edit]
igachan says..."re:定期イベントの自動入力"

テーブル「毎月の行事」
 フィールド[行事名]テキスト型,[日にち]数値型,[時刻]日付/時刻型 から
クエリ「毎月の行事クエリ」
 フィールド[行事名],[日にち],[時刻]をテーブル「毎月の行事」から抽出して、新たに [年]: [Forms]![F_日誌]![年],[月]: [Forms]![F_日誌]![月](フォーム名をF_CalendarからF_日誌に変更)としてフォームから読み込んで[今月の実施日]: DateSerial([年],[月],[日にち])を、同様にテーブル「毎年の行事」は「毎年の行事クエリ」を作り、[年]をフォームから読み込み「毎年の行事」テーブルの[月]、[日」とあわせて[実施日]を表示できる様になったのですがSQL文のSELECTを使うとこの2つのクエリは必要がないのでしょうか?     

2014.04.11 11:43 | URL | #- [edit]
igachan says..."re:定期イベントの自動入力"

毎年の行事の方はこんな感じでよろしいのでしょうか?

Sub 毎年の行事_QueryShow()

Dim db As DAO.Database

Dim rs As DAO.Recordset
Dim qry As QueryDef
Dim MySQL As String

Set db = CurrentDb()


MySQL = "SELCT *, DateSerial(Forms![F_日誌]![年],rs!月,rs!日) AS 今年の日時 "
MySQL = MySQL & "FROM 毎年の行事;"

Set qry = db.CreateQueryDef("", MySQL)
Set rs = qry.OpenRecordset


Do Until rs.EOF
Debug.Print rs!行事名 & " : & rs!今年の日時"
rs.MoveNext

Loop


rs.Close: Set rs = Nothing
db.Close: Set db = Nothing


End Sub

2014.04.11 17:51 | URL | #- [edit]
hatena says..."re:re:定期イベントの自動入力"

返事が遅くなってすみません。
考え方はそれでいいと思います。



エリを作成して、それからレコードセットを開いてますが、クエリを作る必要はないですね。
SQLから直接レコードセットを開けます。

あと、カレンダーフォームの月で抽出したほうがいいでしょう。

それとDAOからは、Forms![F_日誌]![年] というAccessオブジェクトは参照できないので、
SQL文字列の外に出して、VBコード内で確定させる必要があります。

また、おなじくSQL内では、rs!月 というようにrs変数は参照できません。フィールド名で参照してください。


上記のことを考慮して、

Sub 毎年の行事_QueryShow()

 Dim db As DAO.Database
 Dim rs As DAO.Recordset
 Dim qry As QueryDef
 Dim MySQL As String

 Set db = CurrentDb()

 MySQL = "SELCT *, DateSerial(" & Forms![F_日誌]![年] & ",月,日) AS 今年の日時 "
 MySQL = MySQL & "FROM 毎年の行事 "
 MySQL = MySQL & "WHERE 月 = " & Forms![F_日誌]![月]

 Set rs =db.OpenRecordset(SQL)

 Do Until rs.EOF
  Debug.Print rs!行事名 & " : & rs!今年の日時"
  rs.MoveNext
 Loop

 rs.Close: Set rs = Nothing
 db.Close: Set db = Nothing

End Sub


脳内シミュレーションたけで実際に動作確認してないので、見落としがあるかもしれません。


後は、このデータを、カレンダーフォームに表示させるコードを追加することですね。

また、カレンダーフォームに表示させるだけでなく、予定テーブルにこのデータを追加する必要があるかどうかですね。

必要があるなら、追加済みのデータを重複して追加しない仕組みも考える必要があります。

2014.04.12 11:47 | URL | #5uE6dEgY [edit]
igachan says...""

イミディエイトウィンドウで実行させたのですが構文の打ち間違えの時はエラーメッセージが表示されたのですが間違えを修正して実行したのですが何も表示されません。てっきりイミディエイトウィンドウに行事名と今年の日時が表示されるのかと思ったのですが・・・正しく動作しているのでしょうか?テーブル「毎年の行事」にデータは入力してあります。

2014.04.12 21:50 | URL | #- [edit]
igachan says..."スレ677の並び替えがどうしてもわかりません。"

hatenaさん、お世話になります。サブフォームを時刻順に並び替えることを試しているのですがどうしてもうまくいきません。(後から追加や時間の変更があるので対処したい)ご教授願えないでしょうか?「T_予定」は「T_内容」、「F_Calender」は「F_日誌」、「F_予定日誌」は「F_内容」に変更しています。スレNo677にあるのですが以下の様にしか書けないので
Private Sub 時刻_AfterUpdate()

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim qry As QueryDef
Dim MySQL As String

Set db = CurrentDb()

MySQL = "SELECT * FROM T_内容"

'レコードセットを取得
Set rs = db.OpenRecordset(SQL)


'並べ替え
rs.Index = "時刻"

Do Until rs.EOF

Debug.Print rs!日付, rs!時刻
rs.MoveNext

Loop

rs.Close: Set rs = Nothing
db.Close: Set db = Nothing


Me.Requery

End Sub

よろしくお願いします。

2014.04.15 10:31 | URL | #- [edit]
hatena says..."re:スレ677の並び替えがどうしてもわかりません。"

> hatenaさん、お世話になります。サブフォームを時刻順に並び替えることを試しているのですがどうしてもうまくいきません。(後から追加や時間の変更があるので対処したい)ご教授願えないでしょうか?「T_予定」は「T_内容」、「F_Calender」は「F_日誌」、「F_予定日誌」は「F_内容」に変更しています。

現状のコードは、別にレコードセットを開いて、そのレコードセットを並び替えて、閉じる、という処理でして、フォームとはまったく関係のない処理です。


フォームの並び替えは、フォームの設定でします。


サブフォームのレコードソースを編集して並べ替えを設定するのが簡単でしょう。
現状のサブフォームの「レコードソース」プロパティのビルドボタンをクリックしてクエリのデザインビューを表示させます。
そこで、時刻 で並べ替えを設定します。
これで時刻順に並びます。

時刻を変更して、それを並び替えに反映させるには、再クエリをします。
再クエリをすると先頭レコードへ移動しますので、それが具合が悪い場合は、
カレントレコードを記憶しておいて、再クエリ後そのレコードへ戻るようにします。

再クエリのタイミングは、時刻 の更新後でないほうがいいでしょう。
再クエリすると更新が確定してしまうので。

サンプルファイルを改造するとすると、
サブフォームのコードを下記のように記述します。

Option Compare Database
Option Explicit
Dim UpdateTime As Boolean

'フォーム 更新後処理
Private Sub Form_AfterUpdate()
Dim MyID As Long

  If UpdateTime Then
    UpdateTime = False
    MyID = Me.ID
    Me.Requery
    Me.Recordset.FindFirst "ID=" & MyID
  End If
  Me.Parent.SetSchedule
End Sub

'フォーム 削除後確認
Private Sub Form_AfterDelConfirm(Status As Integer)
  If Status = acDeleteOK Then Me.Parent.SetSchedule
End Sub

'フォームの更新前処理
Private Sub Form_BeforeUpdate(Cancel As Integer)
  If Me.時刻.OldValue = Me.時刻.Value Then
    UpdateTime = False
  Else
    UpdateTime = True
  End If
End Sub

2014.04.15 21:55 | URL | #5uE6dEgY [edit]
igachan says..."re:スレ677の並び替えがどうしてもわかりません。"

ありがとうございます。ちゃんと並び替えてくれました!!

2014.04.16 09:26 | URL | #- [edit]
igachan says..."re:re:re:定期イベントの自動入力"

hatenaさん、おせわになります。

以下の構文ですと

Sub 毎年の行事_QueryShow()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim qry As QueryDef
Dim MySQL As String

Set db = CurrentDb()

MySQL = "SELCT *, DateSerial(" & Forms![F_日誌]![年] & ",月,日) AS 今年の日時 "
MySQL = MySQL & "FROM 毎年の行事 "
MySQL = MySQL & "WHERE 月 = " & Forms![F_日誌]![月]

Set rs = db.OpenRecordset(SQL)

Do Until rs.EOF
Debug.Print rs!行事名 & " : & rs!今年の日時"
rs.MoveNext
Loop

rs.Close: Set rs = Nothing
db.Close: Set db = Nothing

End Sub

イミディエイトするとコンパイルエラー「変数が定義されていません」と表示され Set rs = db.OpenRecordset(SQL) のSQLの部分が青になってしまいます。いろいろと試行錯誤を重ねたのですがお手上げ状態です。なぜ青く表示されてしまうのでしょうか?また、なぜMySQLではないのでしょうか?

2014.04.19 10:37 | URL | #- [edit]
hatena says..."re:定期イベントの自動入力"

> イミディエイトするとコンパイルエラー「変数が定義されていません」と表示され Set rs = db.OpenRecordset(SQL) のSQLの部分が青になってしまいます。いろいろと試行錯誤を重ねたのですがお手上げ状態です。なぜ青く表示されてしまうのでしょうか?また、なぜMySQLではないのでしょうか?

単純なタイプミスです。
MySQLに変更してください。

2014.04.19 11:14 | URL | #5uE6dEgY [edit]
igachan says..."re:re:定期イベントの自動入力"

> > イミディエイトするとコンパイルエラー「変数が定義されていません」と表示され Set rs = db.OpenRecordset(SQL) のSQLの部分が青になってしまいます。いろいろと試行錯誤を重ねたのですがお手上げ状態です。なぜ青く表示されてしまうのでしょうか?また、なぜMySQLではないのでしょうか?
>
> 単純なタイプミスです。
> MySQLに変更してください。

hatenaさん、こんにちは。お返事ありがとうございます。
今、SQLをMySQLに変更して試したのですが

「実行時エラー'3078'
入力テーブルまたはクエリ'SELECT*,DateSerial(2014,月,日)AS今年の日付 FROM 毎年の行事 WHERE 月='4'が見つかりませんでした。そのテーブルやクエリが存在していること、または名前が正しいことを確認してください。」

と表示されSet rs = db.OpenRecordset(MySQL)の部分が黄色表示されます。

フォームからの年号は読み込んでますし、テーブルの名前も「毎年の行事」であっていますし、フィールド「月」「日」も数値型で作ってあるのですが・・・何故、月、日を返してくれないのでしょうか?全くわからないのですが。

2014.04.19 17:39 | URL | #- [edit]
しめじ says..."ID抽出"

いつも有益な情報ありがとうございます。

カレンダーの機能を使わせていただいていますが、複数の人のスケジュールを管理したく、T_予定に顧客IDのフィールドを追加し、別にフォーム(F_menu)を作成し、そこに入力されたIDで、F_Calendarにスケジュールの抽出がかかるようにしたいと考えています。

大変ご面倒ではありますが、ご教授頂けると助かります。

Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset
For i = 1 To 42
Me("T" & i).Caption = ""
Next
Set rs = CurrentDb.OpenRecordset( _
"SELECT 日付, 件名 FROM T_予定 WHERE " & _
"日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#", _
dbOpenForwardOnly, dbReadOnly)
Do Until rs.EOF
With Me("T" & rs!日付 - FirstDay)
.Caption = .Caption & rs!件名 & vbCrLf & vbCrLf
End With
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
End Sub

2014.05.27 14:17 | URL | #- [edit]
hatena says..."re:ID抽出"

>   Set rs = CurrentDb.OpenRecordset( _
>     "SELECT 日付, 件名 FROM T_予定 WHERE " & _
>     "日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#", _
>     dbOpenForwardOnly, dbReadOnly)

コード中の OpenRecordset に設定するSQL文のWHERE句に条件を追加してください。

   Set rs = CurrentDb.OpenRecordset( _
     "SELECT 日付, 件名 FROM T_予定 WHERE " & _
     "日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#" & _
     " AND 顧客ID=" & Nz(Forms!F_menu!ID), _
     dbOpenForwardOnly, dbReadOnly)


顧客ID フィールドが数値型の場合です。

2014.05.27 22:23 | URL | #5uE6dEgY [edit]
しめじ says..."ID抽出"

早速の回答ありがとうございます!

一撃で出来ました。

本当に助かりました。

2014.06.02 12:23 | URL | #- [edit]
dog says..."ID抽出について"

いつも大変お世話になっております。

hatenaさんのカレンダーそのままに、テーブルにフィールドを追加して使わせて頂いています。
そこで、「1069」の抽出条件をつけたところ、
「実行時エラー’3421’ データ型の変換エラーが発生しました。」
となってしまいます。

フィールド名は、kanjyaIDで数値型です。
メニューフォーム名も一緒です。

お時間のある時にご回答頂けますでしょうか?
宜しくお願いします。

Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset
For i = 1 To 42
Me("T" & i).Caption = ""
Next
Set rs = CurrentDb.OpenRecordset( _
"SELECT 日付,入退室日,熱,挿入式,抜去式,理由略①,理由略②,白血球,CRP,抗生物質 FROM Q_予定 WHERE " & _
"日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#", _
" AND kanjyaID=" & Nz(Forms!F_menu!ID), _
dbOpenForwardOnly, dbReadOnly)
Do Until rs.EOF
With Me("T" & rs!日付 - FirstDay)
.Caption = .Caption & rs!入退室日 & vbCrLf
.Caption = .Caption & rs!熱 & vbCrLf
.Caption = .Caption & rs!挿入式 & vbCrLf
.Caption = .Caption & rs!理由略① & vbCrLf
.Caption = .Caption & rs!抜去式 & vbCrLf
.Caption = .Caption & rs!理由略② & vbCrLf
.Caption = .Caption & rs!白血球 & vbCrLf
.Caption = .Caption & rs!CRP & vbCrLf
.Caption = .Caption & rs!抗生物質 & vbCrLf
End With
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
End Sub

2014.07.06 09:39 | URL | #- [edit]
hatena says..."re:ID抽出について"

> Set rs = CurrentDb.OpenRecordset( _
> "SELECT 日付,入退室日,熱,挿入式,抜去式,理由略①,理由略②,白血球,CRP,抗生物質 FROM Q_予定 WHERE " & _
> "日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#", _
> " AND kanjyaID=" & Nz(Forms!F_menu!ID), _
> dbOpenForwardOnly, dbReadOnly)

上記のコードを下記に変更してください。

Set rs = CurrentDb.OpenRecordset( _
"SELECT 日付,入退室日,熱,挿入式,抜去式,理由略①,理由略②,白血球,CRP,抗生物質 FROM Q_予定 WHERE " & _
"日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#" & _
" AND kanjyaID=" & nz(Forms!F_menu!ID), _
dbOpenForwardOnly, dbReadOnly)

3行目の最後が、
, _
となっていますが、カンマで区切ってしまってはだめです。
一つのSQL文ですから、
& _
として連結します。

2014.07.06 10:24 | URL | #5uE6dEgY [edit]
dog says..."ありがとうございました。"

早すぎるご回答ありがとうございます!
ご指摘の修正で出来ました。

2014.07.06 11:42 | URL | #- [edit]
dog says..."サブフォームのちらつき"

毎度お世話になっております。

いつの頃からか、サブフォーム内の一つのフィールドを入力後からサブフォームがちらつき、マウスカーソルが頻回に砂時計になってしまいます。

色々調べて、F8キーを押すと止まるのは分かったのですが、再度入力を継続すると現象が再発してしまいます。

解決方法が分かれば、ご教授頂けないでしょうか?

Option Compare Database
Option Explicit

'フォーム 更新後処理
Private Sub Form_AfterUpdate()
Me.Parent.SetSchedule
End Sub

'フォーム 削除後確認
Private Sub Form_AfterDelConfirm(Status As Integer)
If Status = acDeleteOK Then Me.Parent.SetSchedule
End Sub

2014.07.07 10:01 | URL | #- [edit]
dog says...""

[1098]です。
一応自己解決をしました。

'フォーム 更新後処理
Private Sub Form_AfterUpdate()
Me.Parent.SetSchedule
Docmd.OpenForm,"フォーム名"
End Sub

開いたフォームをタイマーで1秒後に閉じると現象が出なくなりました、入力の度に別フォームが開いてしまいますが…
1秒未満だと、何故かダメでした。

お騒がせしました。

2014.07.07 14:48 | URL | #- [edit]
hatena says..."re:サブフォームのちらつき"

自己解決したみたいですが、

> いつの頃からか、サブフォーム内の一つのフィールドを入力後からサブフォームがちらつき、マウスカーソルが頻回に砂時計になってしまいます。
>
> 色々調べて、F8キーを押すと止まるのは分かったのですが、再度入力を継続すると現象が再発してしまいます。
>
> 解決方法が分かれば、ご教授頂けないでしょうか?

当方の環境でサンプルファイルでは再現できませんてした。

サブフォームやサブフォーム上のコントロールのイベントで何かしてませんか。

2014.07.08 10:18 | URL | #5uE6dEgY [edit]
いがちゃん says..."T_予定の時刻も表示させたいのですが"

hatenaさん、お世話になります。

T_予定テーブルの時刻もカレンダーに表示させたいと思い

Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset

For i = 1 To 42
Me("T" & i).Caption = ""
Next
Set rs = CurrentDb.OpenRecordset( _
"SELECT 日付, 時刻, 略 FROM T_予定 WHERE " & _
"日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#", _
dbOpenForwardOnly, dbReadOnly)
Do Until rs.EOF
With Me("T" & rs!日付 - FirstDay)
.Caption = .Caption & rs!時刻 & rs!略 & vbCrLf
End With
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
End Sub

と時刻の部分を二カ所に書き加えたところ、表示はされたのですが
①秒まで表示されてしまうこと
②時刻の順序がバラバラであること

に気がつきました。Format関数を使ったりしたのですがうまくいきませんでした。
上記の2点をクリアできる方法がありましたらご教授いただければ助かります。よろしくお願い致します。

2015.02.19 22:21 | URL | #- [edit]
hatena says..."re:T_予定の時刻も表示させたいのですが"

> ①秒まで表示されてしまうこと

Format関数を使用してください。

.Caption = .Caption & Format(rs!時刻,"hh:nn") & rs!略 & vbCrLf

> ②時刻の順序がバラバラであること

OpenRecordset のSQLにORDER BY句を追加して、日付, 時刻 で並べ替えます。

Set rs = CurrentDb.OpenRecordset( _
"SELECT 日付, 時刻, 略 FROM T_予定 WHERE " & _
"日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "# " & _
"ORDER BY 日付, 時刻", _
dbOpenForwardOnly, dbReadOnly)

2015.02.19 23:40 | URL | #5uE6dEgY [edit]
いがちゃん says..."re:re:T_予定の時刻も表示させたいのですが"

ありがとうございます。無事に表示されとても見やすくなりました。

2015.02.20 18:36 | URL | #- [edit]
たくぼん says..."種別ごとの集計について"

初めまして、たくぼんと言います。
いつも参考にさせて頂いています。
もしよければ、アイディアを頂ければと思い書き込みます。

今回はレコードを順を追ってスケジュールを継ぎ足していく方法と思っています。(違ってたらすいません)
もし集計しようとしたら、何かいい方法はありませんか?

クエリ構成(Qクエリ)
送付先|配送物品|危険度|発送予定日|発送完了日
東京  |野菜   |普通  |2015/3/2 |2015/3/2
東京  |肉     |危険  |2015/3/2 |2015/3/2
・・・
・・

上記テーブルの場合に、その日ごとの内容を
東京 普通:2件 危険:5件
神奈川 普通:3件 危険:0件
埼玉 普通:0件 危険:1件

の様な表示にはできるでしょうか?
もしよければ、ご教授お願いします。

2015.03.17 21:32 | URL | #- [edit]
hatena says..."re:種別ごとの集計について"

クロス集計クエリで、

発送予定日 グループ化 行見出し
送付先 グループ化 行見出し
危険度 グループ化 列見出し
送付先 件数 値

と設定し、さらにクエリ列見出しで、
"普通","危険"
と設定します。


発送予定日 送付先 普通 危険
2015/3/2  東京  2   5
2015/3/2  神奈川 3   0
2015/3/2  埼玉  0   1

という結果が得られますので、それを使うように、
SetSchedule を書き換えればいいでしょう。

クロス集計クエリ名を Q1 として、

'予定表示プロシージャ
Public Sub SetSchedule()
Dim i As integer, rs As DAO.Recordset
  For i = 1 To 42
    Me("T" & i).Caption = ""
  Next
  Set rs = CurrentDb.OpenRecordset( _
    "SELECT 発送予定日, 送付先 & ' 普通:' & Nz(普通,0) & '件" & _
    " 危険:' & Nz(危険,0) & '件' AS 件名 FROM Q1 WHERE " & _
    "発送予定日>#" & FirstDay & "# AND 発送予定日<=#" & FirstDay + 42 & "#", _
    dbOpenForwardOnly, dbReadOnly)
  Do Until rs.EOF
    With Me("T" & rs!発送予定日 - FirstDay)
      .Caption = .Caption & rs!件名 & vbCrLf & vbCrLf
    End With
    rs.MoveNext
  Loop
  rs.Close: Set rs = Nothing
End Sub

2015.03.18 08:54 | URL | #5uE6dEgY [edit]
たくぼん says..."re:re:種別ごとの集計について"

返事が遅くなり申し訳ないです。
hatenaさんのおかげで、思ったような表示をすることができました。
ありがとうございます。

再度の質問で恐縮なのですが、SELECT文の箇所がいまいちわからず・・・

>     "SELECT 発送予定日, 送付先 & ' 普通:' & Nz(普通,0) & '件" & _
>     " 危険:' & Nz(危険,0) & '件'

これは記号等と除くと
SELECT 発送予定日, 送付先 " 普通:" Nz(普通,0)件 " 危険:" Nz(危険,0)件

になるのでしょうか?

2015.03.19 21:14 | URL | #- [edit]
hatena says..."re:種別ごとの集計について"

> 再度の質問で恐縮なのですが、SELECT文の箇所がいまいちわからず・・・
>
> >     "SELECT 発送予定日, 送付先 & ' 普通:' & Nz(普通,0) & '件" & _
> >     " 危険:' & Nz(危険,0) & '件'
>
> これは記号等と除くと
> SELECT 発送予定日, 送付先 " 普通:" Nz(普通,0)件 " 危険:" Nz(危険,0)件
>
> になるのでしょうか?

"SELECT 発送予定日, 送付先 & ' 普通:' & Nz(普通,0) & '件" & _
" 危険:' & Nz(危険,0) & '件' AS 件名 FROM Q1 WHERE "

の部分は、

SELECT 発送予定日, 送付先 & ' 普通:' & Nz(普通,0) & '件 危険:' & Nz(危険,0) & '件' AS 件名 FROM Q1 WHERE

という文字列になります。この文字列がDAO(データベースエンジン)に渡されてSQLとして解釈されます。(VBAではSQLは解釈できない)

2015.03.20 12:47 | URL | #5uE6dEgY [edit]
たくぼん says..."re:re:種別ごとの集計について"

またまた遅くなりすいません。
hatenaさん、丁寧な説明ありがとうございました。
大変勉強になりました。

2015.03.23 21:12 | URL | #- [edit]
nishishow says..."Requeryの件で"

お世話になっております。
サンプルをダウンロードし改良してます。

今回つまづいているのかカレンダーをリクエリできないところです。

サブフォームT_予定をクリックして別ホームF_予定変更で内容を変更し
閉じるのボタンを制作、VBAに

Private Sub cmd閉じる_Click()
 Form.F_Calender.Requery
  DoCmd.Close acForm, "F_予定変更", acSaveYes
End Sub
としていますがオブジェクト定義エラーになってしまいます。
何か方法はありませんか?

2015.04.14 10:51 | URL | #eMkLRZRc [edit]
hatena says..."re:Requeryの件で"

> Private Sub cmd閉じる_Click()
>  Form.F_Calender.Requery
>   DoCmd.Close acForm, "F_予定変更", acSaveYes
> End Sub
> としていますがオブジェクト定義エラーになってしまいます。

フォームを参照するときは、Form ではなく Forms ですね。

 Forms.F_Calender.Requery

これでエラーはでなくなります。

さて、
nishishowさんのやりたいことは、「F_予定変更」フォームで更新した内容をF_Calenderフォームに反映させたいということだと思いますが、
再クエリ(Requery)というのは、フォームと連結しているテーブルやクエリのデータを再読込するという処理ですが、F_Calender は非連結フォーム(レコードソースが空白)ですので、連結しているテーブルやクエリはないので、再クエリしても無意味です。


F_Calenderフォームでは、予定データの読み込んでフォームに表示させているのは、SetSchedule関数です。この関数を呼び出せば、予定の更新が反映されます。

Private Sub cmd閉じる_Click()
  Docmd.RunCommand acCmdSaveRecord 'レコード保存しておく
  Forms!F_Calender.SetSchedule 'SetSchedule関数を実行
  DoCmd.Close acForm, Me.Name
End Sub

2015.04.14 11:37 | URL | #5uE6dEgY [edit]
nishishow says..."re:re:Requeryの件で"

早速のご返事ありがとうございます。

> 再クエリ(Requery)というのは、フォームと連結しているテーブルやクエリのデータを再読込するという処理ですが、F_Calender は非連結フォーム(レコードソースが空白)ですので、連結しているテーブルやクエリはないので、再クエリしても無意味です。

そうですよね(笑)色々ためしてみたのですが・・・・・

Forms!F_Calender.SetSchedule
もやってみたのですが F_Calenderが見つかりませんになってしまいます。
それか、カレンダーのPrivate Sub Form_Open(Cancel As Integer)を
F_予定変更からカレンダーのプロシージャを動かしたほうがよいのですか?

今、accsee2000で作ったDBを2013バージョンに改良中で、
そのまま使えると思ったのですが全然動かなく、
とりあえずカレンダーと思い検索していたらhatenaさんのホームページにたどり着きました。
2000の時も拾ってきたコード(汗)で作ったのでまだまだ勉強不足で、

あと、一つ質問なのですが、2000の時はフォームのコントロールソースをクエリで使っていたのですが2013だと新規入力が出来ないのは何か設定があるのでしょうか?

2015.04.14 13:35 | URL | #eMkLRZRc [edit]
hatena says..."re:re:re:Requeryの件で"

> Forms!F_Calender.SetSchedule
> もやってみたのですが F_Calenderが見つかりませんになってしまいます。

カレンダーフォームの名前をサンプルから変更してませんか。
F_Calender の部分は実際のカレンダーフォームの名前にしてください。

カレンダーフォームは開いたままですよね。

> あと、一つ質問なのですが、2000の時はフォームのコントロールソースをクエリで使っていたのですが2013だと新規入力が出来ないのは何か設定があるのでしょうか?

フォームの「追加の許可」プロパティが「はい」になってますか。
フォームの「レコードセット」プロパティが「ダイナセット」になってますか。

クエリを単独で開いた場合、更新や新規追加はできますか。

2015.04.14 14:10 | URL | #5uE6dEgY [edit]
nishishow says..."re:re:re:re:Requeryの件で"

hatenaさん、何回もすいません・・・
とりあえず、出来ました!!
F_Calender→ F_Calendar スペル間違いでした、すいません。

クエリーの件は
2000でデザインビューから作るとレコードの変更ができるのですが
2013でデザインビューから作ると変更が出来ないのです。
クエリーでテーブルを2個以上つなぐとダメみたいです。

2015.04.14 15:10 | URL | #eMkLRZRc [edit]
hatena says..."re:re:re:re:re:Requeryの件で"

> F_Calender→ F_Calendar スペル間違いでした、すいません。

あら、気が付きませんでした。

> クエリーの件は
> 2000でデザインビューから作るとレコードの変更ができるのですが
> 2013でデザインビューから作ると変更が出来ないのです。
> クエリーでテーブルを2個以上つなぐとダメみたいです。

こちらはこのページとは別の内容になりますので下記の掲示板の方で質問しなおしてください。

hatena の Microsoft Access 掲示板
http://hatena-access.progoo.com/bbs/

2015.04.14 15:16 | URL | #5uE6dEgY [edit]
切り男 says..."予定入力が上手くできません"

Access素人です。
Accessの勉強にこのカレンダーに挑戦しているのですが、予定入力が上手くいきません
入力自体に問題はないのですが、入力した後すぐに予定がカレンダーに反映されず、一度月を変更して戻らないと反映されません
どこが間違っているのでしょうか、教えてもらえるとありがたいです。

2015.06.12 11:52 | URL | #- [edit]
hatena says..."re:予定入力が上手くできません"

サブフォームの「更新後処理」、「削除後確認」欄に、[イベント プロシージャ]と設定されいてますか。
また、そこのビルドボタンをクリックしたときに、該当のコードが表示されますか。

2015.06.12 12:26 | URL | #5uE6dEgY [edit]
切り男 says..."re:re:予定入力が上手くできません"

間違いを教えてもらいありがとうございます。
御蔭様で完成することができました。

ここから自分なりに色々改善していきたいと思います

2015.06.13 13:12 | URL | #- [edit]
minami says...""

hatena様
いつも、ご教示くださり誠にありがとうございます。おかげ様で上記までのスケジュール表が完成いたし、とても喜んでいます。
ありがとうございました。今後の益々のご活躍をお祈りいたします。

2015.12.02 21:47 | URL | #- [edit]
says..."承認待ちコメント"

このコメントは管理者の承認待ちです

2016.02.01 11:46 | | # [edit]
says..."承認待ちコメント"

このコメントは管理者の承認待ちです

2016.02.01 11:55 | | # [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/188-b3bdb90c
該当の記事は見つかりませんでした。