Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba ms access表单中的快速日期输入_Vba_Ms Access - Fatal编程技术网

Vba ms access表单中的快速日期输入

Vba ms access表单中的快速日期输入,vba,ms-access,Vba,Ms Access,我有一个简单的数据库,通过名为[账户交易列表]的表单在表中输入我的日常交易。我没有在实际发生的当天输入所有交易。我宁愿坐下来,每次输入一周的所有日期。因此,我需要手动调整日期字段以匹配实际交易日期。我喜欢使用快捷键,而不是每次都键入整个日期 在我的生活中,我使用过一些Quickbooks。在Quickbooks中,可以使用“+”、“-”和其他键快速操纵日期。例如“+”将日期提前1天,而“-”则从日期中减去一天。“y”表示一年中的第一天,而“r”表示一年中的最后一天。还有其他的,但这给了你一个想法

我有一个简单的数据库,通过名为[账户交易列表]的表单在表中输入我的日常交易。我没有在实际发生的当天输入所有交易。我宁愿坐下来,每次输入一周的所有日期。因此,我需要手动调整日期字段以匹配实际交易日期。我喜欢使用快捷键,而不是每次都键入整个日期

在我的生活中,我使用过一些Quickbooks。在Quickbooks中,可以使用“+”、“-”和其他键快速操纵日期。例如“+”将日期提前1天,而“-”则从日期中减去一天。“y”表示一年中的第一天,而“r”表示一年中的最后一天。还有其他的,但这给了你一个想法。我正在尝试在我的访问表单中复制此内容。以下是我在on Key Down事件中日期控件上的代码

Private Sub Entry_Date_Keydown(KeyCode As Integer, Shift As Integer)
Dim dte As Date

Select Case KeyCode
    Case 189, 109 'Minus key '-'
    KeyCode = 0
    'subtract one day from current date
    Me.Entry_Date = Me.Entry_Date - 1
    SendKeys "{ESCAPE}"
    Me.Dirty = False
    Case 187, 107 '= key (used for the plus)
    KeyCode = 0
    'add one day to current date
    Me.Entry_Date = Me.Entry_Date + 1
    SendKeys "{ESCAPE}"
    Case 84 ' T key
    KeyCode = 0
    Me.Entry_Date = Now
    SendKeys "{ESCAPE}"
    'Let any other key press go
    Case Else
    KeyCode = KeyCode

End Select

End Sub
这在很大程度上是有效的。不过,它偶尔会关闭num锁。我想不出它为什么会这样或什么时候会这样。有时会,有时不会。也许这与我按下快捷键的次数有关。这对于高效的数据输入来说是非常烦人的,因为下一个控件的第二个控件是数字控件。我相信这与
发送键有关,但无法理解如何避免它们。
SendKeys
有助于在每次按键之间更新控件,以便在按下快捷键时可以看到日期更新。否则,日期控件仅在退出时更新

我是否可以在每次按键结束时或在退出控制时验证NUM LOCK是否关闭或打开,然后再将其打开

在这种情况下,是否避免使用
SendKeys
?(因为我认为这是造成问题的原因)

谢谢

SendKeys肯定是解决您问题的关键(双关语)

不是操纵接口,而是寻址窗体的RecordsetClone。这样,您可以轻松地编辑和保存数据

此外,您还可以优化界面,以便快速输入日期,如我的文章所述:

(如果您没有帐户,请浏览链接:阅读全文)

代码太多,无法在此处发布,但您可以修改它以接受快捷方式。完整代码随时可在GitHub上找到:

附录

经过再三考虑,我认为这就是您所需要的一切-无需发送键:

Private子条目\u Date\u Keydown(KeyCode为整数,Shift为整数)
选择大小写键代码
案例189,109‘减号键’——’
'从当前日期减去一天。
我Entry_Date.Value=DateAdd(“d”,-1,Me!Entry_Date.Value)
KeyCode=0
案例187,107‘加键’+’
'将一天添加到当前日期。
我Entry_Date.Value=DateAdd(“d”,1,Me!Entry_Date.Value)
KeyCode=0
案例84’T键
“今天就进来。
我条目\ u Date.Value=现在
KeyCode=0
其他情况
'放开任何其他按键。
结束选择
端接头

好的,谢谢。由于我不是一个经验丰富的用户,这将需要我一段时间才能完成。但乍一看,我认为这对我会有很大帮助。我会回来的…抱歉,再提起这个。我将如何处理RecordsetClone,正如您所说的用键更改日期。我想它仍然会出现在按键事件上。记录集克隆有什么更好的地方?如何打开RecordsetClone?谢谢,我想这里不需要。请看扩展答案。我之所以使用sendkeys是为了显示每次按数字之间的值。否则,它仅在退出控件时显示。除非我添加sendkeys“{escape}”,否则您的代码似乎不会这样做。还有别的办法吗?古斯塔夫,谢谢你的帮助。我也很感激你的日期处理代码。我还没有开始在我的应用程序中使用它,因为我是迄今为止它工作的唯一用户。如果我需要将它分发给其他人,我确信我需要使用您的代码来规范日期输入。
Private Sub EntryDate_KeyPress(KeyAscii As Integer)

    Select Case KeyAscii
        Case 45       ' Minus key '-'
            KeyAscii = 0
            ' Subtract one day from current date.
            Me!EntryDate.Value = DateAdd("d", -1, Me!EntryDate.Value)
        Case 43, 61       ' Plus key '+'
            KeyAscii = 0
            ' Add one day to current date.
            Me!EntryDate.Value = DateAdd("d", 1, Me!EntryDate.Value)
        Case 116             ' T key
            KeyAscii = 0
            ' Enter today.
            Me!EntryDate.Value = Now
        Case Else
            ' Let any other key press go.
    End Select

End Sub