プロが教える店舗&オフィスのセキュリティ対策術

Access2000でコンボボックスで日付を選択できるように
したいとおもっています。

リストは、予め1999年~2010年をセットするなどして
月・日についてもコンボボックスを作成しています。
規定値ではformat(year(date()),"0000")などとして
現在日時から年・月・日を取得しています。
コンボボックス選択後、一つのデータとして入れ込んでいます。

次からは前のデータを参照し、コンボボックスは
予めその行が選択されているようにしたいのですが、
うまくいきません。

レコードから年・月・日などを取って
コントロールソースに
=format( year([tx_date]), "0000" )
※tx_dateには"2002/12/18"という形で入っています。
を入力すると、コンボボックスを選択することが
できません。

上記のような状況を打開する策をお教えいただけませんでしょうか?
よろしくお願いいたします。

わかりにくくてすみません。

A 回答 (3件)

お疲れ様です



単票フォームと仮定して、説明します。
フォーム上には、年・月・日という3つのコンボボックスがあるんですよね。

しかし、実際に保存されているデータは一つのフィールドなんですよね。
だとしたら、コンボボックスのコントロールソースには、何も設定してはいけません。
(何も設定せずに非連結にする)

フォームにレコードソースを設定しているならば、下記コードにて実現できると思います。
'~~~~~~~~~~
Private Sub Form_Current()
Me.cmb年.Value = Year(Me.Txt日付.Value)
Me.cmb月.Value = Month(Me.Txt日付.Value)
Me.cmb日.Value = Day(Me.Txt日付.Value)
End Sub

Private Sub cmb年_AfterUpdate()
Me.Txt日付.Value = DateSerial(Me.cmb年.Value, Me.cmb月.Value, Me.cmb日.Value)
End Sub

Private Sub cmb月_AfterUpdate()
Me.Txt日付.Value = DateSerial(Me.cmb年.Value, Me.cmb月.Value, Me.cmb日.Value)
End Sub

Private Sub cmb日_AfterUpdate()
Me.Txt日付.Value = DateSerial(Me.cmb年.Value, Me.cmb月.Value, Me.cmb日.Value)
End Sub

'~~~~~~~~~~

レコード移動時のイベントにて、保存されている日付データをコンボボックスに反映しています。
各コンボボックスの更新後のイベントで、日付データの内容を更新しています。
これで、相互関係は成り立つと思われます。

あと、規定値のことですが、この場合コンボボックスに規定値はいりません。
フォーム上の日付テキストボックスの規定値プロパティに「=Date()」と設定すればOKです。
(このフォーム上の日付テキストボックスは、可視設定「不可」でかまいません)

参考になれば...
    • good
    • 0

下記が一部でも参考になれば幸いです。


下記でコンボ30等はcohkojiさんが実行時に決まる名前で
変えてください。
Msgbox cmby.Name等をtest02の終わりの方に入れると
なんという名前になったか、見られるでしょう。
test04は適当なイベントプロセジュアに変えてください。
すると、初めは本日の日付けにセットされます。
ある日付にセットして、次の回の日付のセットまで何があるか、私には判らないので、前回の日付を次回に引き継ぐところは組みこめていません。悪しからず。
(注)値リストの「リスト」は半角に変えてください。
OKWEBで強制的に、全角になってしまっています。
Option Compare Database
Option Explicit

Sub test01()
Dim frm1 As Form
Set frm1 = CreateForm
With frm1
.Caption = "取引1"
End With
End Sub
'------------
Sub test02()
Dim cmby As Control
Dim cmbm As Control
Dim cmbd As Control
Dim i As Integer
DoCmd.OpenForm "取引1", acDesign
Set cmby = CreateControl("取引1", acComboBox, acDetail, , , 500, 400, 700, 200)
Set cmbm = CreateControl("取引1", acComboBox, acDetail, , , 1500, 400, 700, 200)
Set cmbd = CreateControl("取引1", acComboBox, acDetail, , , 2500, 400, 700, 200)
End Sub
'-----------
Sub test03()
Dim s As String
Dim i As Integer
DoCmd.OpenForm "取引1", acDesign
Forms("取引1").コンボ30.RowSourceType = "値リスト"
s = ""
For i = 1999 To 2010
s = s & Str(i) & ";"
Next i
Forms("取引1").コンボ30.RowSource = s
'------
Forms("取引1").コンボ31.RowSourceType = "値リスト"
s = ""
For i = 1 To 12
s = s & Str(i) & ";"
Next i
Forms("取引1").コンボ31.RowSource = s
'------
Forms("取引1").コンボ32.RowSourceType = "値リスト"
s = ""
For i = 1 To 31
s = s & Str(i) & ";"
Next i
Forms("取引1").コンボ32.RowSource = s
End Sub
'----------
Sub test04()
Dim y, m, d As String
y = Year(Date)
m = Month(Date)
d = Day(Date)
Forms("取引1").コンボ30.SetFocus
Forms("取引1").コンボ30.Text = y
Forms("取引1").コンボ31.SetFocus
Forms("取引1").コンボ31.Text = m
Forms("取引1").コンボ32.SetFocus
Forms("取引1").コンボ32.Text = d
End Sub
    • good
    • 0

コンポボックスの規定値に入れたらどうですか。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!