第8课 VBA输入语句InputBox(2)

2019-03-28 15:16

和直接产生区域引用的功能,大大方便了用户的使用。

在工作中尽量使用Application.Inputbox方法替代Inputbox函数。 使用时一定要注意,不对用户录入信息进行验证的是VBA中的Inputbox函数,带验证功能的是Application.Inputbox方法。

8.3.1 Application.Inputbox语法详解

Application.Inputbox方法的基本语法如下:

Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type) 表2中包括了Application.Inputbox方法的各参数详解。

表2Application.Inputbox方法的各参数详解

名称 Prompt Title Default Left Top HelpFile HelpContextID Type 必选/可选 必选 可选 可选 可选 可选 可选 可选 可选 描述 要在对话框中显示的消息。可以为字符串、数字、日期、或布尔值(在显示之前, Excel自动将其值强制转换为String) 输入框的标题。如果省略该参数,默认标题将为“Input” 指定一个初始值,该值在对话框最初显示时出现在文本框中。如果省略该参数,文本框将为空。该值可以是 Range 对象 指定对话框相对于屏幕左上角的 X 坐标(以磅为单位) 指定对话框相对于屏幕左上角的 Y 坐标(以磅为单位) 此输入框使用的帮助文件名。如果存在 HelpFile和HelpContextID 参数,对话框中将出现一个帮助按钮 HelpFile 中帮助主题的上下文 ID 号 指定返回的数据类型。如果省略该参数,对话框将返回文本

Application.Inputbox方法有8个参数,其中最重要的是前三个和最后一个。Type参数可以指定一种或者多种数据类型,而Application.Inputbox方法则会根据类型对用户的录入信息进行检查,如果不符合指定类型则会阻止程序执行。

8.3.2 案例应用

现对Type参数在工作中的应用展示三个案例。

1.强制用户录入数值

以图6中提示用户录入月份为例,强制用户录入1到12月的数值,否则程序拒绝执行。Application.Inputbox方法完全可以胜任,代码如下:

Sub 数值校验()

months = Application.InputBox(\请指定月份\月份\MsgBox months End Sub

其中最后一个参数1表示只能录入数值。 当用户执行代码时,如果在对话框中录入非数值“5月”,那么程序将提示“无效的数字”,如下图所示:

图6录入非数值时的提示

2.对任意选区进行行列合计

假设要对一个区域进行横向、纵向求和,通过Application.InputBox方法来选择区域会比直接在代码中指定区域灵活得多。 案例代码如下:

Sub 行列自动合计()

Dim rng As Range, address As String '声明一个对象变量

'如果当前选择的对象是单元格则将单元格地址赋予变量,否则将空文本赋予变量

IF TypeName(Selection) = \ '弹出一个对话框, 让用户选择区域, 默认显示变量address的值。然后将该用户选择区域赋予变量rng

Set rng = Application.InputBox(\请选择待合计的区域\合计区域\ IF rng Is Nothing Then Exit Sub '先汇总各行的值

For i = 1 To rng.Rows.Count '从1到总行数

'利用Offset取得汇总数据的放置位置, 即选区第一个单元格向右偏移选区的列数

'合计区域也用Offset逐行偏移来获取, Resize的作用是重置为1行, 否则会汇总其他行的数据

rng(1).Offset(i - 1, rng.Columns.Count) = WorksheetFunction.Sum (rng.Offset(i - 1).Resize(1)) Next

'再汇总各列的值

For i = 1 To rng.Columns.Count + 1 '从1到总列数加1,因为需要对行的汇总数再进行汇总

rng(1).Offset(rng.Rows.Count, i - 1) = WorksheetFunction.Sum (rng.Offset(, i - 1).Resize(, 1)) Next End Sub

在本过程中Application.InputBox语句默认显示的是当前选区地址,可以手动选择区域,从而重新产生地址在输入框中。然后过程根据用户选择的区域进行横向、纵向合计。 Application.Inputbox方法的Type参数使用8,表示返回单元格引用,其数据类型为Range。

图7通过鼠标拖动录入区域地址

下图是计算结果:

图8计算结果

很显然,Application.InputBox方法除了检校功能外,自由选择区域的功能相当人性化。

3.利用Application.Inputbox录入公式

在单元格中录入公式时,Excel会对公式进行检查,如果不符合公式的基本语法会阻止用户录入。而VBA中的Inputbox方法也可以实现同等功能。 例如对下图的数据进行排名次:

图9成绩表

如果使用VBA的对话框来录入公式,那么代码如下:

Sub 设置计算名次的公式() '首先选择待输入公式的单元格

[c2].Select

'设置C2的公式, 第8参数必须用零, 否则单元格中显示值而非公式

[c2].FormulaLocal = Application.InputBox(\请输入计算名次的公式:\公式\ '填充公式

Range(\End Sub

该过程中,Application.Inputbox第八个参数使用零,表示在C2单元格产生公式,如果使用其他值作为参数则只能产生公式的结果,而非公式本身。

利用Application.InputBox方法录入公式时需要注意四点:

(1)在弹出对话框前必须先定位于目标单元格,否则公式中引用的单元格或者区域会产生错位,类似于条件格式中的引用;

(2)在对话框中录入公式时,可以利用鼠标单击单元格来产生地址,而且可以通过快捷键【F4】使其在相对引用、绝对引用与混合引用三个状态之间切换,与直接在单元格中录入公式的方式一致;

(3)在代码中必须对存放公式的单元格使用FormulaLocal属性,那么VBA就会对录入的公式进行检测,如果录入的字符不符合公式的格式,那么将阻止程序继续执行,从而确保公式的正确性;

(4)如果需要在单元格中录入数组公式,则需要使用FormulaArray 属性。代码如下:

[c2].FormulaArray = Application.InputBox(\请输入计算名次的公式:\公式\

执行本过程时,VBA会弹出一个输入公式的对话框,在其中录入公式“=rank(B2,$B$2:$B$8)”,如下图所示,然后单元格C2会自动产生公式,且将公式向下填充,直到B列最后一个非空单元格。

图10在对话框录入排名次的公式

如果在其中录入一个不完整的公式“=rank(B2,$B$2:$B$8”,那么VBA会提示用户公式缺少括号,如下图所示:

图11公式缺少括号时弹出提示框

如果用户在对话框中录入公式时忽略了等号,那么VBA会将它当作文本字符串,自动添

加引号及等号。例如用户录入“rank(B2,$B$2:$B$8)”,那么单元格中则会产生以下公式:

=\

Application.Inputbox方法录入的公式可以在看不见的工作表中执行,这是相对手工录入公式的优越性。例如,sheet2属于隐藏状态,那么以下语句完全不影响正常执行,仍然可以在目标单元格产生正确公式:

Sheet2.[c2].FormulaLocal = Application.InputBox(\请输入计算名次的公式:\公式\

由于今天时间比较紧,没法及时给大家出课后练习题,明天我会补上,放在以下网址: http://www.exceltip.net/forum-39-1.html

明天我会在群里公布作业内容和具体的帖子地址,请在家踊跃参与。

学习的目的是应用,不是将知识放在硬盘中。所以以后的每堂课的课后作业请大家及时参与,不要怕答案不完善,或者可能出错。 没有错过的人很难进步的。


第8课 VBA输入语句InputBox(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:临时用水施工组织设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: