Excel VBA 编程基础 -- 对象(十二)
- 2026-10-25 05:59:46
Excel VBA 编程基础 -- 对象(十二)今天继续讨论 Interaction 模块中的过程与函数。 SendKeys SendKeys 向当前活动窗口发送按键,就像人在键盘上按键一样。其一般格式为: SendKeys keystring [, wait ] 其中,keystring 是字符串表达式,表示发送的按键序列。wait 是 Boolean 表达式,False 表示 SendKeys 将按键发送出去即返回,True 表示将按键发送出去并等待应用程序处理完毕再返回。 由以上说明,可知 SendKeys 一次可以发送一个按键序列,即多个键的组合。下面看一个例子。 例1. SendKeys 用法示例 
图1 SendKeys 用法示例 在这个例子中,我们完全用 VBA 代码来操作计算器。 首先,用 Shell 来启动计算器;接着,用 AppActivate 将计算器窗口激活为当前活动窗口;接下来,用一个 For 循环向计算器窗口发送按键,表示 1 到 10 的加法;然后,发送按键 = 得出最终累加结果;接着,程序等待 5 秒钟后,向计算器发送 % + F4 的按键序列,以关闭计算器应用程序。 注意:SendKeys 只是向当前活动窗口发送按键。所以,在使用 SendKeys 之前,将目的窗口设置为当前活动窗口就至关重要。因此,程序中调用两次 AppActivate,分别以 taskID 和 pid 为参数,就是要确保将计算器窗口设置为当前活动窗口。 MsgBox MsgBox 函数显示一个消息对话框,等待用户点击按钮,然后返回一个整数,表示用户点击的按钮。其一般格式为: MsgBox( prompt [, buttons [, title [, helpfile, context ]]]) 其中,prompt 是要显示的消息,最大长度为 1024 个字符,可以使用 Chr(13) 和 Chr(10) 的组合表示回车换行。buttons 是可选参数,表示对话框上要显示的按钮组合以及图标(表示信息种类是关键、问题、提示等),以及哪个按钮具有焦点等设置。可选参数 title 表示对话框的标题。可选参数 helpfile 表示帮助文件,而可选参数 context 则是帮助文件中的主题编号,以便提供上下文有关的帮助信息。 注:这里的帮助文件是指以前的 HLP 格式的帮助文件,现在因为微软将所有帮助信息都 Web 化了,因此这里的 helpfile 和 context 意义不大。 下面看一个例子。 例1. MsgBox 函数用法示例 
图2 MsgBox 用法示例 MsgBox 显示为: 
图3 MsgBox 显示的对话框 MsgBox 中的 buttons 参数中键的组合及意义列表如下: 
图4 buttons 参数 MsgBox 函数的返回值列表如下: 
图5 MsgBox 函数返回值 InputBox InputBox 显示一个对话框,等待用户输入内容,然后返回以字符串类型表示的用户输入内容。其一般格式为: 
其中,prompt 是字符串表达式,表示向用户显示的提示信息,最长为 1024 个字符,可以用 Chr(13) 和 Chr(10) 的组合来显示回车换行。title 是可选参数,表示对话框的表体,如果省略,则使用应用程序名。可选参数 default 表示默认值,如果用户不提供内容,则 InputBox 返回该默认值,如果没有提供 default 参数,则输入框显示空白。可选参数 xpos 和 ypos 表示对话框左上角位置坐标,如果省略 xpos 和 ypos,则对话框水平方向居中,垂直方向为距屏幕顶端三分之一的位置。helpfile 和 context 与上面的 MsgBox 相同,此不赘述。 下面看一个例子。 例1. InputBox 用法示例 
图6 InputBox 用法示例 该示例的 InputBox 显示效果如下图: 
图7 InputBox 点击确定按钮或按回车键,则 InputBox 返回输入框中的内容;如果点击取消按钮,则 InputBox 返回空字符串。 注意: CallByName CallByName 执行一个对象的方法,或访问对象的属性。其一般格式为: 
其中,object 的类型为 Variant(Object),表示 CallByName 索要访问的对象名称。procname 的类型为 Variant(String),一个字符串表达式,表示 CallByName 所要执行的方法或要访问的属性。calltype 是一个常量,表示 CallByName 所要执行的过程的类型。args() 是可选参数,类型为 Variant(Array),表示需要进一步提供的参数。 calltype 的常量列表如下: 
图8 calltype 常量 下面来看一个具体例子。 例1. CallByName 用法示例 
图9 CallByName 用法示例 我们看到,集合对象 Collection 中的所有可访问成员(譬如 Add、Count、Item 等)都是方法,这在下面的图中看得更清楚: 
图10 Collection 的成员 由图可见,不管是 Add,还是 Count、Item,都是方法(Sub 或 Function)。 所以,上面的例子中,CallByName 都使用 vbMethod 来执行相应的过程。 下面我们来看看字典(Dictionary)。 例2. CallByName 对 Dictionary 的访问 
图11 CallByName 对 Dictionary 的访问 由图可见,Dictionary 中的 Count 是以属性的方式来实现的,因此,在用 CallByName 来访问 Dictionary.Count 时,calltype 使用的是 vbGet。Item 成员也实现为属性(Property Get)。 既然我们可以使用 obj.Property 和 obj.Method() 来访问对象,为什么还要使用 CallByName 这种看起来很笨重的方式呢? 直接访问需要在编译时进行绑定,但有时候在编译时并不知道某个对象有哪些属性和方法,只有等到运行时才能知道。此时,这种直接的绑定机制就无能为力了。 至此,我们关于 VBA 中的对象系列就结束了。通过这十二篇对象系列和七篇的类与对象系列,我们应该对 VBA 中的类与对象有了基本的了解,能够使用 VBA 提供的众多的类与对象,特别是,能够编写自己的类并创建满足自己特殊需求的对象。 接下来,我们将讨论字符串,这又是一个大话题。 相关阅读 Excel VBA 编程基础 -- 对象(十一) Excel VBA 编程基础 -- 类与对象(七)








InputBox 的输入框可接 255 个字符,但返回时则截断为 254 个字符。 InputBox 的输入框不接受回车换行符,如果拷贝到输入框中的字符串含有回车换行符,则 InputBox 返回的字符串将在回车换行符处截断。





本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。