codecamp

VBA中使用InputBox方法

除了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之间的语句被忽略了。


技巧:子程序和函数:你应该使用哪个?

创建子程序的时候:
„

①需要执行一些动作
②需要获取用户信息
③需要在屏幕上显示信息

创建函数的时候:


①需要不只一次的做一些简单的计算
②需要做复杂的计算
③需要不只一次地调用相同的指令块
④需要检查某些表达正确与否



VBA InputBox函数
VBA如何使用主过程和子过程
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }