除了InputBox函数之外,还有InputBox方法,如果你激活对象浏览器,然后搜索“inputbox”,VB将显示两个InputBox——一种为Excel库,另一种为VBA库(见图4-12)。InputBox方法在Excel库里面可用,它的语法和本章前面讲的InputBox函数的语法有轻微差别,它的语法为:
expression.InputBox(Prompt, [Title], [Default], [Left], [Top], [HelpFile],
[HelpContextID], [Type] )
所有方括号里面的参数都是可选的。Prompt(提示)参数是显示于对话框上的信息;Title是对话框的标题;而Default是对话框上文本框里的初始值。Left和Top参数是明确对话框在屏幕上的位置。这些参数的输入值的单位是Point(1/72英寸)。当用户点击帮助按钮时,参数HelpFile和HelpContextID明确帮助文件名称以及某个明确的帮助主题。InputBox方法的最后一个参数——Type(类型)明确返回的数据类型。如果你忽略这个参数,InputBox方法将会返回文本格式。类型参数的值列在表4-3里。
图4-12 别忘记使用对象浏览器来搜索VB函数和方法
表4-3 InputBox方法返回的数据类型
如果你使用3作为Type参数的话,用户将既可以输入一个数字也可以输入一个文本。这个值是将1(数字)和2(字符串)加和而得到的。InputBox方法很适合那些需要用户选择工作表单元格范围的VBA程序。
1. 关闭对象浏览器,如果你已经打开了的话
2. 在模块Sample8里面,输入下列过程WhatRange:
Sub WhatRange()
Dim newRange As Range
Dim tellMe As String
tellMe = "Use the mouse to select a range:"
Set newRange = Application.InputBox(prompt:=tellMe, _
Title:="Range to format", _
Type:=8)
newRange.NumberFormat = "0.00"
newRange.Select
End Sub
过程WhatRange开始于一对象变量的声明——newRange。试回想一下第三章,对象变量指向数据的地址。用户选择的单元格被赋值给对象变量newRange。注意变量名称前面的关键字Set:
Set newRange = Application.InputBox(prompt:=tellMe, _
Title:="Range to format", _
Type:=8)
类型参数(Type:=8)使用户能够选择任何单元格区域。当用户选中单元格区域时,下句指令:
newRange.NumberFormat = "0.00"
改变所选单元格的格式。最后一句选择用户加亮的区域。
3.运行过程WhatRange。VB显示一个对话框,提示用户在工作表里选择一个单元格区域。
4. 使用鼠标选择你要的单元格,当鼠标在单元格上拖动时,VB就会将选择的区域引用到对话框的编辑框里面。
图4-13 使用Excel的InputBox方法,你可以从用户处获得区域地址
5.你选择了单元格后,点击对话框上的确定按钮,被选择的区域就已经设置好格式了。要检查是否按你的意思设置了,你可以在该区域的任意单元格里输入一个整数,这个数字应该显示为两位小数。
6. 重新运行该过程,并且当出现对话框时,点击取消按钮。如果你在选择了一个单元格或者一个区域后点击确定按钮,过程WhatRange将工作正常。不幸地是,当你点击取消按钮或Esc按钮,VB将显示一错误信息——“要求对象”。当你点击错误对话框上的调试按钮,VB就会加亮导致错误的代码行。因为你不希望在取消对话框时选择任何单元格,所以你必须想个法子忽略VB显示的这个错误。使用一个专门的语句,On Error GoTo 标志,你就可以绕过错误的发生。该指令的语法如下:
On Error GoTo 标志
这个指令应该放在变量声明行的下面。标志可以是除了VB关键字之外的任何你想要的词语。如果错误发生时,VB就会直接跳到该特别的标志,如下面步骤8所示。
7. 选择“运行”-“重新设置”以取消正在运行的程序。
8.将过程WhatRange修改为如下所示WhatRange2:
Sub WhatRange2()
Dim newRange As Range
Dim tellMe As String
On Error GoTo VeryEnd
tellMe = "Use the mouse to select a range:"
Set newRange = Application.InputBox(prompt:=tellMe, _
Title:="Range to format", _
Type:=8)
newRange.NumberFormat = "0.00"
newRange.Select
VeryEnd:
9. 运行程序WhatRange2,一旦出现对话框时就点击取消按钮。注意,这次程序没有产生错误。当VB遭遇错误时,就会跳到位于程序结尾处的标志VeryEnd。位于错误和标志VeryEnd之间的语句被忽略了。
技巧:子程序和函数:你应该使用哪个?
创建子程序的时候:
①需要执行一些动作
②需要获取用户信息
③需要在屏幕上显示信息
创建函数的时候:
①需要不只一次的做一些简单的计算
②需要做复杂的计算
③需要不只一次地调用相同的指令块
④需要检查某些表达正确与否