hxjzgf 发表于 2003-10-9 13:30:00

VBA中很奇怪的一件事情。

在VBA中,在窗体上建 个文本框,如何按enter键实现自动输入后自动清空,进行下一个输入?


Private Sub TextBOX1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
   .......在这里写代码就行了
End If
End Sub

利用key_press 和KEY_UP事件时,不会响应回车事件。呵呵。

只有在KEY-DOWN时才响应回车事件!请大侠论证一下,是不是如此??

efan2000 发表于 2003-10-9 13:44:00

回车键只有在按下KeyDown和弹起KeyUp两个事件中才能捕捉到。KeyPress与它们的区别是它不能捕捉控制键,比如回车键、TAB键等。
弹起KeyUp事件没反应,可能是在其中处理改变了KeyCode的值。比如将它设置为零。那么就相当于过滤了这个键值。

hxjzgf 发表于 2003-10-9 14:06:00

但是在VB中是完全可以捕捉到的。
另外,你有尝试一下吗?
就写这一句:
MSGBOX KEYCODE
呵呵。

zeng29 发表于 2003-10-9 14:40:00

不错,是这样,在VBA中包括OfficeVBA都是这样,这一点上与VB确实有区别.

efan2000 发表于 2003-10-9 18:51:00

帮助文件中的说明:


KeyPress 事件发生在下列任意键被按下时:

任何可打印的键盘字符。


Ctrl 键与标准字母表中字符的组合。


Ctrl 键与任何特殊字符的组合。


Backspace 键。


Esc 键。
在下面情况下,KeyPress 事件不发生:

按下 Tab 键。


按下 Enter 键。


按任何箭头键。


引起焦点在控件之间移动的键击操作。



KeyDown 和 KeyUp 事件通常用于识别或区分以下各键:

扩充的字符键,比如功能键。


翻阅键,如 Home、End、PageUp、PageDown、向上、向下、向右、向左和 Tab 键。


组合键和标准键盘组合键 (Shift、Ctrl 或 Alt 键)。


数字键区和键盘数字键。
在下列情况下,KeyDown 和 KeyUp 事件不发生:

在带有命令按钮(其 Default 属性为 True )的窗体上按 Enter 键。


在带有命令按钮(其 Cancel 属性为 True)的窗体上按 Esc 键。

zeng29 发表于 2003-10-9 19:39:00

VB中是这样定义的:
--------------------------------------------------------------------------
KeyDown 和 KeyUp 事件

KeyUp 和 KeyDown 事件报告键盘本身准确的物理状态:按下键 (KeyDown) 及松开键 (KeyUp)。与此成对照的是,KeyPress 事件并不直接地报告键盘状态─ 它只提供键所代表的字符而不识别键的按下或松开状态。

进一步举例将有助于阐明这一差别。输入大写 "A" 时,KeyDown 事件获得 "A" 的 ASCII 码。在输入小写 "a" 时,KeyDown 事件获得相同的 ASCII 代码。为区分大小写,这些事件使用 shift 参数。与此相对照的是,KeyPress 事件将字母的大小写作为两个不同的 ASCII 字符处理。
-----------------------------------------------------------------------------
KeyPress 事件


在按下与 ASCII 字符对应的键时将触发 KeyPress 事件。ASCII 字符集不仅代表标准键盘的字母、数字和标点符号,而且也代表大多数控制键。但是 KeyPress 事件只识别 ENTER、TAB 和 BACKSPACE 键。KeyDown 和 KeyUp 事件能够检测其它功能键、编辑键和定位键
---------------------------------------------------------------------------
可见,在VB中的KeyPress事件可以检测到ENTER、TAB 和 BACKSPACE 键.这与实际测试结果相同.

mccad 发表于 2003-10-9 22:49:00

自动输入后自动清空,你可以设置一个按钮,把它的Default属性设置为True。在它的点击事件中写入你所要的操作,这样在文本框中按回车就可以执行该按钮中的内容了。
我想这样会合理一些。
页: [1]
查看完整版本: VBA中很奇怪的一件事情。