Interaction模块
Interaction模块将程序边缘发生的所有独立过程组合在一起——与用户交互、根据值分支、启动另一个进程、读取环境变量或注册表、创建/调用/引发COM对象上的事件。
向用户提问
MsgBox显示一个包含消息、图标和选定按钮集的模式对话框;它返回一个VbMsgBoxResult值,标识被点击的按钮。InputBox显示一个带有文本输入字段的类似对话框,返回用户输入的字符串(如果用户取消则返回空字符串)。Beep发出系统提示音——在长时间运行的操作完成时作为声音提示很有用。
Dim Answer As VbMsgBoxResult
Answer = MsgBox("Save changes before closing?", vbYesNoCancel + vbQuestion, "Confirm")选择值
该模块提供四种内联选择值的方式:
- If是短路内联条件——twinBASIC新增。只评估匹配条件的分支,因此
If(Divisor <> 0, 100 / Divisor, "n/a")即使Divisor为零也是安全的。 - IIf是历史VBA内联条件。truepart和falsepart始终都会被评估,因此无法防止未使用分支中的错误。
- Choose从值列表中返回第index项——对于固定长度参数列表,等效于基于1的数组索引。
- Switch遍历*(条件, 值)*参数对,返回与第一个True条件配对的值——If...ElseIf阶梯的紧凑替代。
Dim Status As Variant
Status = Switch(Age < 13, "Child", _
Age < 20, "Teenager", _
Age < 65, "Adult", _
True, "Senior")Partition是相关工具:返回一个可打印标签,标识某个值落入一系列等宽数值范围中的哪一个。
启动和操控其他进程
Shell异步启动另一个程序并返回新进程的任务ID;AppActivate通过标题或任务ID将已运行应用程序的窗口带到前台。SendKeys向当前具有焦点的窗口发送按键,DoEvents将控制权交还给消息循环,以便在长时间计算期间分派绘制、输入和定时器事件。
环境变量和命令行
Command$和Command返回程序启动时传入的命令行参数。Environ$和Environ返回进程环境变量的值,可按名称或环境块中基于1的索引查找。
每用户应用程序设置
注册表设置辅助函数在HKEY_CURRENT_USER\Software\VB and VBA Program Settings下读写每用户的值,映射VB6使用的存储约定。SaveSetting写入单个键,GetSetting读回(对缺失键可提供可选默认值),GetAllSettings返回某个节中所有键值对作为两列Variant数组,DeleteSetting删除一个键、整个节或应用程序的所有设置。
SaveSetting "MyApp", "Window", "Maximised", "True"
Debug.Print GetSetting("MyApp", "Window", "Maximised", "False") ' "True"
DeleteSetting "MyApp", "Window", "Maximised"COM对象和动态调度
CreateObject根据ProgID或CLSID实例化新的COM/Automation对象——当提供servername时可选择在远程机器上创建。GetObject是其对偶:它可以绑定到文件(加载拥有该文件的应用程序)或附加到已运行的对象类实例。
获得对象引用后,CallByName和CallByDispId在运行时动态调用对象上的方法或属性——前者按名称查找,后者按原始IDispatch调度ID查找。RaiseEventByName和RaiseEventByName2按事件名字符串在对象上引发事件——RaiseEvent语句的运行时等价物,当引发的事件在编译时未知时非常有用。两种形式的区别仅在于事件参数的提供方式:作为打包的Variant数组,或作为可变长度参数列表。
成员
- AppActivate -- 激活应用程序窗口
- Beep -- 通过计算机扬声器发出提示音
- CallByDispId -- 通过IDispatch调度ID动态调用对象上的方法或属性
- CallByName -- 通过名称动态调用对象上的方法或属性
- Choose -- 从列表中按基于1的索引返回一个值
- Command$, Command -- 返回传给程序的命令行参数
- CreateObject -- 创建COM/Automation对象的新实例
- DeleteSetting -- 从Windows注册表中应用程序条目删除节或键设置
- DoEvents -- 将控制权交还给消息循环以处理挂起事件
- Environ$, Environ -- 返回进程环境变量的值
- GetAllSettings -- 返回应用程序注册表条目某个节中的所有键值对
- GetObject -- 返回从文件加载或已运行的Automation对象的引用
- GetSetting -- 从Windows注册表中应用程序条目返回键设置值
- If -- 求值表达式并返回两个值之一,采用短路求值
- IIf -- 求值表达式并返回两个值之一;两个分支始终都被评估
- InputBox -- 提示用户输入一行文本并返回所输入内容
- MsgBox -- 显示模式消息对话框并返回用户点击的按钮
- Partition -- 返回标识数字所属范围的字符串
- RaiseEventByName -- 按名称在对象上引发事件,参数作为Variant数组传入
- RaiseEventByName2 -- 按名称在对象上引发事件,接受可变长度参数列表
- SaveSetting -- 在Windows注册表中应用程序条目保存或创建键设置
- SendKeys -- 向活动窗口发送按键
- Shell -- 异步运行另一个程序并返回其任务ID
- Switch -- 返回(条件, 值)对列表中与第一个True条件配对的值