2011-08-04 8 views
1

日付フィールドをコンボボックスにバインドするにはどうすればよいですか(行ソースタイプ=値リストあり)?日付フィールドを2列の「値リスト」コンボボックスにバインドするにはどうすればよいですか?

我々セットアップVBAでフォームのLoadで、このようなコンボボックス:

For i = 0 To 6 
    Dim strValueMember As String 
    Dim strDisplayMember As String 
    strValueMember = format(DateAdd("d", 0 + i, anchorDate), "dd-MMM-yy") & ";" 
    strDisplayMember = format(DateAdd("d", 0 + i, anchorDate), "ddd dd-MMM-yy") & ";" 
    strItems = strItems & strValueMember & strDisplayMember 

Next i 
strItems = Left(strItems, Len(strItems) - 1) 

Me.cboDeliveryDate.RowSource = strItems 

これは私たちに7日間のリストから選択することができ、ユーザとの小ぎれいなコンボボックスを提供します。ボーナスとして、彼は曜日を見るようになります(実際には、このエンドユーザにとって、曜日の名前は非常に重要です)。

enter image description here

コンボボックスは、(曜日名を表示するように)2つのカラム(真日付の)値の列と表示欄があります。


しかし、我々が設定バウンド方問題があります。

を私たちが列にバインドされた列を設定した場合、それは明らかに動作しますが、格納された値が31/12/1899であるが、 1900年1月1日、1900年2月1日など、それは単にコンボのlistindexを読んで、それを日付に変換するだけです。

バインドされた列を列に設定すると、選択した値がデータベースに書き戻されるという点で実際に機能します。明らかに、ユーザーたちが列にバインドされた列を設定した場合、彼の編集が

をとっていることを感じることはありませんので、しかし、それは、フォーム上に表示されることはありません、我々はリストのエラーではありませんを取得します。


上記のすべての我々はstrValueMemberため dd-MMM-yyを使用するかかどうかを適用する(@HansUpの答えが示唆するように、 yyyy-m-d)。

+0

'次のintI'はエラーを発生させませんか? – HansUp

+0

@ HansUpここで投稿を書く際にタイプミスがありました – hawbsl

答えて

1

は、最初のようにstrValueMemberで、cboDeliveryDateは2列がありように私には見えるし、それはまた、日付/時刻フィールドにバインドされたバインドされた列、です。これはyyyy-m-dの日付形式でstrValueMemberをフォーマットすることによって私の仕事をしてくれました。

Private Sub Form_Load() 
    Dim i As Long 
    Dim anchorDate As Date 
    Dim strValueMember As String 
    Dim strDisplayMember As String 
    Dim strItems As String 

    anchorDate = Date 

    For i = 0 To 6 
     strValueMember = Format(DateAdd("d", i, anchorDate), _ 
      "yyyy-m-d") & ";" 
     strDisplayMember = Format(DateAdd("d", i, anchorDate), _ 
      "ddd dd-MMM-yy") & ";" 
     strItems = strItems & strValueMember & strDisplayMember 
    Next i 
    strItems = Left(strItems, Len(strItems) - 1) 
    Me.cboDeliveryDate.RowSource = strItems 
End Sub 

anchorDateはどこから来るのか私は知りませんでしたので、私はちょうど今日の日付を置換。

+0

FormLoadをForm1にコピーして正しい日付をデータベースに書き戻しましたが、選択した値はユーザーに返されません – hawbsl

+0

anchorDate、今日は問題ありません。 – hawbsl

+1

コンボの「列幅」プロパティに「1」を使用すると、同じ動作が表示されます---行を移動するときに、格納された値がコンボに表示されません。ただし、最初の列(0.1 "; 1"でも)がゼロより大きい場合、格納されている値が表示されます。それがあなたに受け入れられるかどうかはわかりません。もしそうでなければ、@ iDevlopのようにコールバック関数があなたが望むようにコンボを動作させることができるかどうかを見てください。 – HansUp

0

少し複雑ですが、必要な値のリストを返す関数を作成することもできます。 例hereを参照してください。

関連する問題