Access VBA質問箱 IV

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

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


3614 / 9994 ←次へ | 前へ→

【9639】Re:カレンダー式スケジュール表について(2)
お礼  たまお  - 07/7/1(日) 23:12 -

引用なし
パスワード
   ▼小僧 さん:
遅くなり申し訳ありません。

>For i = 1 to 17
>    Me.Controls("日" & Format(i, "00")).ControlSource = "日" & Format(i, "00")
>    Me.Controls("DD" & Format(i, "00")).ControlSource = "DD" & Format(i, "00")
>    Me.Controls("CC" & Format(i, "00")).ControlSource = CC" & Format(i, "00")
>Next i

Formatを使ってコントロールをまとめる方法があるんですね。
大変、勉強になりました。ありがとうございました。

>当方であれば、T_連 の 日01 フィールドのデータ型を日付型にして
>テキストボックスの書式で m/d(aaa) と設定し表示させ、
>VBA のコードでは日付型で受ける方法を取ると思います。

T_連の、日01フィールド型は12/25(木)という表示形式であれば、
本来は、日付型ですが、以下の理由によりテキスト型にしています。

7/25(水) 7/26(木) 7/27(金) 7/28(土) という表示形式<日01〜日04>もあれば、
連休の事情により、
●:7/25(水) 7/26(木) 7/27(金) 7/28(土) という表示形式にしたい場合も
ありますので、テキスト型にしています。
----------------------------------------------
あと、別件で申し訳ありませんが、スケジュールの記入/閲覧画面に対して
実はイメージをフォームに表示する方法色を表示させるためのテーブル構成に
ついていろいろ考えてみて、以下のホームページの内容の通り変更した。


※ERROR:本文に禁止語句が含まれているため、URLを貼り付けられない
ようなので、大変申し訳ありませんが、

Googleで、「[ACC97] イメージをテーブルに保存せずフォームに表示する方法」と
入れて検索したら、1番目に表示されますので、ご確認下さい。
そのURLのように変更しました。

変更前:
CC  CD          説明
−−−−−−−−−−−−−−−−−−
1   ビットマップイメージ  出社日
2   ビットマップイメージ  連休対象日
−−−−−−−−−−−−−−−−−−

変更後:
CC  P       説明
−−−−−−−−−−−−−−−−−−
1   C:\color1.bmp   出社日
2   C:\color2.bmp   連休対象日
−−−−−−−−−−−−−−−−−−


記入画面は、以下の画面構成ですが、上記のようにテーブル構成にしたため、
色を表示させるものは、日付を表示させるためのテキストボックスの後ろに、
イメージを表示させるためのコントロールを置き、C:\ の下に置いた色ファイルを
読み込む方法でプログラムを作成しました。
そうすることで、以下のサイトのように、Access のテーブルにイメージデータを
保存せずにファイルサイズを小さくできることで対応させて頂きました。

● 画面の内容:単票フォーム

◇記入画面の詳細          No_連休,ユーザID ← 不可視
−−−−−−−−−−−−−−−−−−−−−−−−−−−
場所:                      [保存:コマンドボタン]
姓名:                      [閉じる:コマンドボタン]
−−−−−−−−−−−−−−−−−−−−−−−−−−−
過去の連休名 [夏休み |▼] ← コンボボックスで過去の連休を参照する。(cmb_連休)
−−−−−−−−−−−−−−−−−−−−−−−−−−−
   日    月    火 7/25(水) 7/26(木) 7/27(金) 7/28(土) ←日付を表示
[   ] [   ] [   ] [   ] [   ] [   ] [   ] ←スケジュールを記入
7/29(日) 7/30(月) 7/31(火) 8/1 (水) 8/2 (木) 8/3 (金) 8/4 (土)
[   ] [   ] [   ] [   ] [   ] [   ] [   ] ←スケジュールを記入
8/5 (日) 8/6 (月) 8/7 (火) 8/8 (水) 8/9 (木) 8/10(金)    土
[   ] [   ] [   ] [   ] [   ] [   ] [   ] ←スケジュールを記入
   日    月    火    水    木    金    土
[   ] [   ] [   ] [   ] [   ] [   ] [   ] ←記入不要
−−−−−−−−−−−−−−−−−−−−−−−−−−−

No_連休 ユーザID    組織名 姓名   連休   日01   D01  CC01  T_色_1.P    日02
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
60    a000001    □aa○cc AA    盆07   12/27(水)    1    C:\color1.bmp  12/28(木)・・(略)
65    a000001    □aa○cc AA    夏季07  4/25(水)    1    C:\color1.bmp  4/26(木)・・(略)
65    a000002    □aa○cc SS    夏季07  4/25(水)    1    C:\color1.bmp  4/26(木)・・(略)
70    a000001    □aa○cc AA    秋07   7/25(水)    1    C:\color1.bmp  7/26(木)・・(略)
75    a000001    □aa○cc AA    冬07   8/11(土)    2    C:\color2.bmp  8/12(日)・・(略)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

日01〜日17:日付表示
D01〜D17:スケジュール記入用
CC01〜CC17:1を選択したらC:\color1.bmp、2を選択したらC:\color2.bmp

以下プログラムです。
小僧さんのプログラムを参考に、1画面1レコード分に対して、以下、やりたい4点ができるように
色を区別できるように表示できました。


しかし・・・・・・問題が発生。閲覧画面は一覧表示のため、色を
区別できません。
新規ページへ続く・・


Option Compare Database
Dim flgSaveOK As Boolean

Private Sub Form_BeforeUpdate(Cancel As Integer)
  If Not flgSaveOK Then
    Cancel = True
  End If
End Sub

Private Sub Form_Current()

  Dim No_holi As Long
  Dim inc01 As Variant
  Dim days01 As Variant
  Dim i As Integer
  Dim lngGrey As Long

  For i = 1 To 28
    Me.Controls("txt日" & Format(i, "00")).ControlSource = ""
    Me.Controls("txtD" & Format(i, "00")).ControlSource = ""
    Me.Controls("txtD" & Format(i, "00")).Locked = False
    Me.Controls("txtD" & Format(i, "00")).BackColor = RGB(255, 255, 255)
    Me.Controls("連結" & Format(i, "00")).Picture = ""
  Next i

  No_holi = Me.No_連休
  inc01 = DLookup("[日01]", "T_連", "No_連休 =" & No_holi)
  days01 = Left(Right(inc01, 2), 1)
  lngGrey = RGB(219, 215, 218)

  If days01 = "日" Then
    For i = 1 To 17
      Me.Controls("txt日" & Format(i, "00")).ControlSource = "日" & Format(i, "00")
      Me.Controls("txtD" & Format(i, "00")).ControlSource = "D" & Format(i, "00")
      Me.Controls("連結" & Format(i, "00")).Picture = Me.Controls("txtP" & Format(i, "00"))
    Next i
    For i = 18 To 28
      Me.Controls("txtD" & Format(i, "00")).Locked = True
      Me.Controls("txtD" & Format(i, "00")).BackColor = lngGrey
      Me.Controls("連結" & Format(i, "00")).BackColor = lngGrey
    Next i

  ElseIf days01 = "月" Then
  ・・・(略)

End Sub

Private Sub cmb_連休_AfterUpdate()

On Error GoTo Err_cmb_連休_AfterUpdate
  Me.Filter = "ユーザID = '" & str1 & "' And 連休対象 = '" & Me.cmb_連休.Column(0) & "'": Me.FilterOn = True

Exit_cmb_連休_AfterUpdate:
  Exit Sub

Err_cmb_連休_AfterUpdate:
  MsgBox "編集中は 検索機能は使えません。", vbExclamation, "通知"
  Resume Exit_cmb_連休_AfterUpdate

End Sub

Private Sub Form_Open(Cancel As Integer)

  Me.ShortcutMenu = False
  DoCmd.MoveSize 2000, 300, 9900, 7500
  Me.RecordSource = "SELECT ・・・略"

  Me.cmb_連休 = DLookup("[連休名]", "T_連", "No_連休 = " & DMax("No_連休", "T_連"))
  Me.Filter = "ユーザID = '" & str1 & "' And 連休対象 = '" & Me.cmb_連休.Column(0) & "'": Me.FilterOn = True

End Sub

Private Sub btn_閉じる_Click()
・・略
End Sub

Private Sub btn_保存_Click()
・・略
End Sub

Private Sub Form_Error(DataErr As Integer, Response As Integer)
・・略
End Sub

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
やりたいことは、以下4点です。

(1)記入画面が開いた時に最初に表示されるスケジュールは、「No_連休」が一番
大きい数字で、なおかつ、ログインしたユーザのレコードが表示されるものとする。

(2)スケジュール記入の最初の日を、曜日位置に合わせて第1週に埋め込む。
例えば、夏休みのスケジュール記入の最初の日は、7/25(水)です。
それを第1週の、4番目の位置〜17日分表示させたい。

日    月    火 7/25(水) 7/26(木) 7/27(金) 7/28(土) ←4番目の位置に表示したい

で、過去の連休名というコンボボックスでは、過去の連休を参照するわけですが、
もし、「冬休み」を選択した場合は、最初の日は、12/25(木)です。

したがって、

日    月    火    水 12/25(木) 12/26(金) 12/27(土) ←5番目の位置に表示したい

という風に表示したい。

(3)スケジュール記入対象日以外の日は日付を埋め込まない。

(4)画面を閉じる時は非連結に元に戻す。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

818 hits

【9614】カレンダー式スケジュール表について(1) たまお 07/6/26(火) 1:47 質問[未読]
【9615】カレンダー式スケジュール表について(2) たまお 07/6/26(火) 2:01 質問[未読]
【9619】Re:カレンダー式スケジュール表について(2) 小僧 07/6/26(火) 13:04 回答[未読]
【9639】Re:カレンダー式スケジュール表について(2) たまお 07/7/1(日) 23:12 お礼[未読]

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