複数の日付入力フィールドを含むフォームがある Access データベースを使用しています。日付の区切り文字としてピリオドを使用することに慣れている新しいユーザーがいるので、"6/22/11" または "6-22-11" の代わりに "6.22.11" と入力します。この種類のエントリを引き続き許可したいのですが、Access は "6.22.11" を日付ではなく時刻に変換します。テキストボックスのフォーマットを「Short Date」に設定しようとしましたが、助けがありませんでした。また、「Lost Focus」イベントにコードを追加しようとしましたが、Access が既に変換を行っているため、遅すぎます。「Before Update」イベントは変換前に発生しますが、テキスト ボックス内のテキストを変更することはできません。日付入力の 3 つの形式すべてを許可する方法についてのアイデアはありますか?
5 に答える
上記の例
Private Sub Texto0_KeyPress(KeyAscii As Integer)
If Chr(KeyAscii) = "." Then
KeyAscii = Asc("/")
End If
End Sub
私のために働きます。
もう1つの近似は、BeforeUpdateイベントとAfterUpdateイベントで遊ぶことです。BeforeUpdateでは、コントロールのコンテンツを変更することはできませんが、AfterUpdateイベントでフラグ(モジュール/フォームレベルで定義された変数)を設定してコンテンツを変更できます。これにより、BeforeUpdateが再度トリガーされますが、この場合は、フラグを立てると、それを無視してフラグを外す必要があります。
区切り文字なしで数字の文字列を入力するだけで、入力マスクに6桁と8桁の日付を入力することに慣れているユーザーのために、次の関数を作成しました。目的に合わせて変更できるはずです。
'---------------------------------------------------------------------------
' Purpose : Enables entry of 8-digit dates with no delimiters: 12312008
' Usage : Set OnChange: =DateCtlChange([Form].[ActiveControl])
' 8/ 6/09 : Allow entry of 6-digit dates with no delimiters
' (year 2019 and 2020 must still be entered as 8-digit dates)
'---------------------------------------------------------------------------
Function DateCtlChange(DateCtl As TextBox)
Dim s As String, NewS As String
On Error GoTo Err_DateCtlChange
s = DateCtl.Text
Select Case Len(s)
Case 6
If s Like "######" Then
If Right(s, 2) <> "19" And Right(s, 2) <> "20" Then
NewS = Left(s, 2) & "/" & Mid(s, 3, 2) & "/" & Mid(s, 5, 2)
End If
End If
Case 8
If s Like "########" Then
NewS = Left(s, 2) & "/" & Mid(s, 3, 2) & "/" & Mid(s, 5, 4)
End If
End Select
If IsDate(NewS) Then
DateCtl.Text = NewS
DateCtl.SelStart = Len(DateCtl.Text)
End If
Exit_DateCtlChange:
Exit Function
Err_DateCtlChange:
Select Case Err.Number
'Error 2101 is raised when we try to set the text to a date
' that fails the date control's validation
Case 2101 'The setting you entered isn't valid for this property.
'Log error but don't show user
Case Else
'Add your custom error logging here
End Select
Resume Exit_DateCtlChange
End Function
Access は、システムの日付と時刻の形式を使用して、値の変換方法を決定します。このユーザーのコンピューター上のすべてのプログラムに影響を与える別のオプションは、次のとおりです。 format-HA010351415.aspx?CTT=1#BM2
または、Access の日付にスラッシュの代わりにスペースを使用できます。したがって、ユーザーは左手でスペース バーを使用し、右手で数字キーボードを使用できます。これは、スラッシュやハイフンよりもはるかに使いやすいと思います。