ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5678|回复: 4

如何在VBA的窗体中定义键盘上某个键的动作

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-1-20 11:05 | 显示全部楼层 |阅读模式
如何在VBA的窗体中定义键盘上某个键的动作,问题见附件: l193wMFF.rar (8.87 KB, 下载次数: 99)

TA的精华主题

TA的得分主题

发表于 2005-1-20 13:00 | 显示全部楼层

SendKeys 方法

请参阅

将一个或多个键击发送到活动窗口(仿佛是在键盘上击键一样)。

object.SendKeys(string)

参数

object 对象。
string
表示要发送的键击(一个或多个)的字符串值。

说明

使用 SendKeys 方法可以将键击发送到无自动化界面的应用程序中。多数键盘字符都可用一个键击表示。某些键盘字符由多个键击组合而成(例如,CTRL+SHIFT+HOME)。要发送单个键盘字符,请将字符本身作为 string 参数发送。例如,要发送字母 x,则请发送 string 参数 "x"。

注意 要发送空格,则请发送字符串 " "。

可使用 SendKeys 同时发送多个键击。为此,可将每个键击按顺序排列在一起,以此来创建表示一系列键击的复合字符串参数。例如,要发送键击 a、b 和 c,则需要发送字符串参数 "abc"。SendKeys 方法将某些字符用作字符的修饰符(而不使用其本身的含义)。这组特殊的字符可包括圆括号、中括号、大括号,以及:

  • 加号 "+"、
  • 插入记号 "^"、
  • 百分号 "%"、
  • 和“非”符号 "~"。

用大括号 "{}" 括起这些字符可以发送它们。例如,要发送加号,请使用字符串参数 "{+}"。SendKeys中使用的中括号 "[ ]" 无任何特殊含义,但是必须把它们括在大括号中,以便容纳确实要赋予其特殊含义的应用程序(例如,对于动态数据交换 (DDE) 就是这样)。

  • 要发送左中括号字符,请发送字符串参数 "{[]";要发送右中括号字符,请发送字符串参数 "{]}"。
  • 要发送左大括号字符,请发送字符串参数 "{{}";要发送右大括号字符,请发送字符串参数 "{}}"。

某些键击不生成字符(如 ENTER 和 TAB)。某些键击表示操作(如 BACKSPACE 和 BREAK)。要发送这些类型的键击,请发送下表中列出的参数:

参数
退格键{BACKSPACE}、{BS} 或 {BKSP}
BREAK{BREAK}
CAPS LOCK{CAPSLOCK}
DEL 或 DELETE{DELETE} 或 {DEL}
向下键{DOWN}
END{END}
ENTER{ENTER} 或 ~
ESC{ESC}
HELP{HELP}
HOME{HOME}
INS 或 INSERT{INSERT} 或 {INS}
向左键{LEFT}
NUM LOCK{NUMLOCK}
PAGE DOWN{PGDN}
PAGE UP{PGUP}
PRINT SCREEN{PRTSC}
向右键{RIGHT}
SCROLL LOCK{SCROLLLOCK}
TAB{TAB}
向上键{UP}
F1{F1}
F2{F2}
F3{F3}
F4{F4}
F5{F5}
F6{F6}
F7{F7}
F8{F8}
F9{F9}
F10{F10}
F11{F11}
F12{F12}
F13{F13}
F14{F14}
F15{F15}
F16{F16}

要发送由常规键击和 SHIFT、CTRL 或 ALT 组合而成的键盘字符,请创建表示该键击组合的复合字符串参数。可通过在常规键击之前添加一个或多个以下特殊字符来完成上述操作:

特殊字符
SHIFT+
CTRL^
ALT%
注意 这样使用时,不用大括号括起这些特殊字符。

要指定在按下多个其他键时,按下 SHIFT、CTRL 和 ALT 的组合,请创建复合字符串参数,用括号括起其中的组合键。例如,要发送的组合键指定:

  • 如果在按 e 和 c 的同时按 SHIFT 键,则发送字符串参数 "+(ec)"。
  • 如果在按 e 时只按 c(而不按 SHIFT),则发送字符串参数 "+ec"。

可使用 SendKeys 方法发送一种在一行内重复按键的键击。为此,要创建复合字符串参数,以指定要重复的键击,并在其后指定重复次数。可使用 {键击 数字} 形式的复合字符串参数来完成上述操作。例如,如果要发送 10 次 "x",则需要发送字符串参数 "{x 10}"。请确保在键击和数字之间有一个空格。

注意 只可以发送重复按一个键的键击。例如,可以发送 10 次 "x",但不可发送 10 次 "Ctrl+x"。
注意 不能向应用程序发送 PRINT SCREEN 键 {PRTSC}。

TA的精华主题

TA的得分主题

发表于 2005-1-20 13:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

SendKeys 语句示例

本示例使用 Shell 函数来运行 Microsoft Windows 所附的计算器程序;然后使用 SendKeys 语句来按下计算器的某些数字键,最后退出计算器。(若要观察示例运行过程,可将示例粘贴到过程中,再运行过程即可。因为 AppActivate 会将焦点转移到计算器应用程序,故本示例不能以单步方式来运行。)。在 Macintosh上,使用Macintosh 应用程序接受键盘输入而不是用Windows 计算器。

Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1)    ' 运行计算器。
AppActivate ReturnValue     ' 激活计算器。
For I = 1 To 100    ' 设置计数循环。
    SendKeys I & "{+}", True    ' 按下按键给计算器
Next I    ' 将所有 I 值相加。
SendKeys "=", True    ' 取得总合。
SendKeys "%{F4}", True    '  ALT+F4 关闭计算器。

'*========================================================

还有一个帮助文件

SendKeys 语句

将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。

语法

SendKeys string[, wait]跟上面有点区别

SendKeys 语句的语法具有以下几个命名参数:

部分 描述

string 必需的。字符串表达式,指定要发送的按键消息。

Wait 可选的。指定等待方式的 BooleandefBooleanDataType@veendf98.chm 值。如果为 False(缺省值),则控件在按键发送出去之后立刻返回到过程。如果为 True,则按键消息必须在控件返回到过程之前加以处理。

(这部分与上面相同,不再重复)

注意 不能用 SendKeys 将按键消息发送到Macintosh这样一个应用程序,这个应用程序并没有被设计成在 Microsoft Windows or Macintosh中运行。Sendkeys 也无法将 PRINT SCREEN 按键 {PRTSC} 发送到任何应用程序。

[此贴子已经被作者于2005-1-20 13:13:50编辑过]

TA的精华主题

TA的得分主题

发表于 2005-1-20 13:20 | 显示全部楼层

TO 七兄,不用这个事件。

以下代码请楼主参考:

'* +++++++++++++++++++++++++++++ '* Created By I Love You_Word!@ExcelHome 2005-1-20 13:18:51 '仅测试于System: Windows NT Word: 10.0 Language: 2052 '^The Code CopyIn [用户窗体-UserForm1]^' '* -----------------------------

Private Sub CommandButton1_Click() Unload Me End Sub '---------------------- Private Sub TextBox1_Change() If TextBox1.Text = "xxgx" Then Selection.TypeText Text:="谢谢关心!" TextBox1.Text = "" End If End Sub '---------------------- Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) On Error Resume Next If KeyCode = vbKeyBack Then If TextBox1.TextLength = 0 Then With ActiveDocument DoEvents '转移控制权 '删除最后一个可见字符 .Range(.Content.End - 2, .Content.End - 1).Delete End With End If End If End Sub '---------------------- Private Sub UserForm_Initialize() Me.TextBox1.SetFocus End Sub '----------------------

'* +++++++++++++++++++++++++++++ '* Created By I Love You_Word!@ExcelHome 2005-1-20 13:20:58 '仅测试于System: Windows NT Word: 10.0 Language: 2052 '^The Code CopyIn [标准模块-NewMacros]^' '* -----------------------------

Sub Macro1() UserForm1.Show 0 '无模式 End Sub '----------------------
见附件:

zlVGLxm8.zip (13.5 KB, 下载次数: 156)
[此贴子已经被作者于2005-1-20 13:21:19编辑过]

TA的精华主题

TA的得分主题

发表于 2005-1-21 10:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

t守柔,

学了一招,我还没有用过DoEvents函数 。

[此贴子已经被作者于2005-1-21 10:29:24编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 12:24 , Processed in 0.037233 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表