|
コンボボックスやリストボックスのRowSourceで、日付や時間の記入されているセルを指定すると、リストは参照セルの表示形式と同じで表示されますが、取得する値は参照しているセルの値(シリアル値)を返します。
例えば、Sheet1A1:A5に日付か時間が入っているものとし(複合可)、
フォーム上に
ComboBox1、CommandButton1、CommandButton2、CommandButton3、
CommandButton、TextBox1 のコントロールがあるとして。
以下のコードを試してみてください。
※ループしてのMe.ComboBox1.AddItemとTextプロパティの使用は、
書きませんでした。
Textプロパティ、セルに表示してあるのと同じ状態を取得するので、
「#######」だった場合、「#######」と取得するから。
************ 参考お試しコード
Const CombRag As String = "Sheet1!A1:A5"
'テキストに書き込み
Private Sub ComboBox1_Change()
If Me.ComboBox1.ListIndex >= 0 Then
Me.TextBox1.Value = Me.ComboBox1.List(Me.ComboBox1.ListIndex)
End If
End Sub
'1、List&Valueプロパティ。
' セルの値が時間だけの場合は、リストもシリアル値になる。
' 日付の場合は、コントロールパネルの地域の短い方の書式に依存する。
Private Sub CommandButton1_Click()
Me.ComboBox1.Value = vbNullString
'RowSourceをListに変える場合は、RowSourceをクリアする。
Me.ComboBox1.RowSource = vbNullString
Me.ComboBox1.List = Range(CombRag).Value
End Sub
'2、セルの表示形式のっとって表示。
Private Sub CommandButton2_Click()
Dim CelFomt As String
CelFomt = Range(CombRag).Cells(1).NumberFormatLocal
Me.ComboBox1.Value = vbNullString
'RowSourceをListに変える場合は、RowSourceをクリアする。
Me.ComboBox1.RowSource = vbNullString
Me.ComboBox1.List = Application.Text(Application.Evaluate(CombRag), CelFomt)
End Sub
'3、RowSource、リストの表示はセルの表示形式の通り
' 取得は、セルのシリアル値を取得する。
Private Sub CommandButton3_Click()
Me.ComboBox1.Value = vbNullString
Me.ComboBox1.RowSource = CombRag
End Sub
Private Sub CommandButton4_Click()
If Me.ComboBox1.ListIndex >= 0 Then
MsgBox Me.ComboBox1.Value & vbLf & _
Me.ComboBox1.List(Me.ComboBox1.ListIndex)
End If
End Sub
by Win2000 EXCEL2002SP3 & EXCEL2000SP1
因みに
コントロールパネル地域の短い方の日付の書式はこれで取れます。
MsgBox Format(Date, "Short Date")
|
|