vba 函数向下拉时 类型不匹配?

括号用于包围函数调用的参数。将它们用于过程调用可能会导致意外的问题。

因为它们可能会引入错误,所以在运行时通过向过程传递可能不希望的值,而在编译时仅通过使用无效语法即可。

多余的括号会引入错误。给定一个将对象引用作为参数的过程...

这将引发“对象必需”运行时错误#424。在其他情况下,可能还会发生其他错误:在这里,Application.ActiveCell

括号强制VBA评估括号表达式的值,并将结果传递ByVal给被调用的过程。当评估结果的类型与过程的预期类型不匹配并且无法隐式转换时,将引发运行时错误。

因为("无效的代码!", vbCritical)无法将表达式计算为值。

但是肯定看起来很傻。避免多余的括号。

}

第1章 单元格与区域选择技巧

实例1选择A列最后一个非空单元格

Sub 选择A列最后一个非空单元格()
    • (1)Range():返回一个Range对象,它代表一个单元格或单元格区域。区域的大小由其参数决定。
    • (3)End(xlUp):Range.End属性返回一个Range对象,代表包含源区域的区域尾端的单元格。
    • (4)Range.Select:选择单元格。要选择单元格或单元格区域,使用Select方法。要使单个单元格成为活动单元格,请使用Activate方法。它们两者的区别是Select方法可选择多单元格,而Activate方法只能选择单个单元格。
  • (1)excel常用对象主要有四个
    • range:代表excel中的单元格或单元格区域
  • (3)Range对象的End属性有四个

实例2基于指定位置的偏移量的选取

  • 择当前单元格下一行已用区域外第一个空白单元格。
    • (1)Sub Worksheet_Change(ByVal Target As Range):工作表事件,在工作表中数据被修改时发生。需要特别指出的是,单元格中函数与公式结果改变时将不引发此事件。
    • (2)Cells():单元格对象,等同于Range。Range()代表某一单元格、某一行、某一列、某一选定区域或者某一三维区域。而Cells()带参数时只能表示单个单元格,不带参数时表示工作表中所有单元格,不及range()表示单元格那么灵活。
    • (4)Offset:表示指定单元格区域一定的偏移量位置上的区域,它有两个参数,一个为偏移行数,一个为偏移列数,可以是负数。

实例3选择当前列最大值

  • 选择光标所在列的最大值所在的单元格,如果存在多个单元格等于最大值,仅选择第一个。
Sub 选择当前列最大值()
    • (2)For Each…Next:这是一种循环语句,针对一个数组或集合中的每个元素,重复执行一组语句。
    • (4)Dim:声明变量(变量:命名的存储位置与数据范围,包含在程序执行阶段可修改的数据。变量名在其声明范围内必须只有唯一名称不可重复。)并分配存储空间,每一个变量都需要声明方可使用。
      声明变量时除指定变量名称外,还会指定变量类型,不同类型占用空间不同,运行速度也不相同。当在过程中使用Dim语句时,通常将Dim语句放在过程的开始处。
    • (5)在过程中使用变量时一般需要先声明其名称和储存空间。
  • (1)excel中有常量和变量
    • 作用域:如果在过程中使用const语句声明的常量为本地常量,
    • 如果是在模块的第一个过程之前使用const语句声明的常量为模块级常量
  • (3)变量分类与声明:
  • 公共变量:pubilc 变量名 as 数据类型
  • 静态变量:static 变量名 as 数据类型
  • 可以使用声明符声明变量
  • (4)VBA的基本语句
Sub 选择负数单元格()
  • Application.Union:返回两个或多个区域的合并区域,支持30个参数

实例5选择单元格所在区域及工作表已用区域

  • (2)ActiveSheet.UsedRange:返回一个Range对象,该对象表示指定工作表上所使用的区域,以使用区域的最大行、最大列为边界。

实例6选择数组公式区域

Sub 选择数组公式区域()

实例7返回单元格合集与交集

Sub 单元格合集与交集()
    • (2)Application.Intersect:该对象表示两个或多个区域重叠的矩形区域。

实例8选择背景色为黄色的单元格

Sub 选择黄色的单元格()

实例9选择字体为蓝色之单元格

Sub 选择蓝色字体的单元格()
    • 注意这里的excel字体颜色需要设置成#0000FF才行
    • (range).Font.ColorIndex:表示(单元格)字体颜色地址,可用1~56表示。可以用以下代码列出所有颜色地址对应的颜色
    • 可以用以下代码列出所有颜色地址对应的颜色:

实例10选择粗线边框之单元格

Sub 选择粗线边框的单元格()
  • (2)xlMedium:表示单元格边框的粗细,共有4种可选值,本例中为中等粗细。
    本例中最后一步是选择带有粗线边框的单元格,假设在指定区域中不存在粗线边框的单元格,则程序运行到此句时要出错,加上“On Error Resume Next”则可以跳过错误。

实例11反向选择工作表

Sub 反向选择工作表()
已用区域中的最后一个单元格
含有相同验证条件的单元格

实例12选择单元格区域但排除首行标题

实例13每隔三行选一行

Sub 每隔三行选一行()
  • (1)Range.Formula:即在单元格中输入公式,注意不要忘记等号

第2章 多表单元格选择

实例15同时选择三个表的B2∶B11区域

  • Array(arglist):表示数组,参数arglist是一个用逗号隔开的列表,用于给数组赋值。

实例16选择本表以外所有工作表的B2∶B11区域

Sub 选择本表以外所有工作表的B2到B11区域()
  • (1)ActiveSheet:代表活动工作簿中或指定的窗口或工作簿中的活动工作表(最上面的工作表)。如果没有活动的工作表,则返回Nothing。后缀.Name即取得工作表的名称。
  • (2)ReDim:在过程级别中使用,用于为动态数组变量重新分配存储空间。

实例17选中名字包含“星期”的工作表的已用区域

  • 通配符包括“”和“?”,“”表示任意字符;“?”表示单个字符

第3章 对选区进行基本统计

实例18提取选区地址并计数

Sub 提取选区地址并计数()
Sub 提取选区地址并计数()
如果为True,则以绝对引用返回引用的行部分。默认值为True
如果为True, 则以绝对引用返回引用的列部分。默认值为True
引用样式。默认值为xIAI
如果为True,则返回外部引用:如果为False, 则返回本地引用。默认值为False
为xIR1Cl, 则必须包括相对引用的起始点。此参数是定义起始点的Range对象
  • (2)Chr(10):Chr()返回String,其中包含有与指定的字符代码相关的字符,0~31之间的数字与标准的非打印ASCII代码相同。正常范围为0-255。

实例19判断选区隐藏的单元格个数

Sub 判断选区隐藏的单元格个数()
  • Range.Hidden:返回或设置一个Variant值,它指明是否隐藏行或列

实例20列出隐藏的单元格地址

Sub 判断单元格的隐藏状态()
 MsgBox "没有处于隐藏状态的单元格"
  • (1)GoTo:无条件地转移到过程中指定的行,用于程序代码的转移。

  • (2)On Error GoTo err:Error是程序错误,整句即表示当程序有错误时则运行标签“err”之后的代码。

  • 应该是将temp删除最后一个"、“号后的语句,如果没有这句代码就会多个”、"

实例21统计空白单元格个数

Sub 空白单元格个数()
Sub 空白单元格个数()

实例23计算已用行列数

Sub 计算已用行列数()
Sub 计算已用行列数()

实例24统计带批注之单元格个数

Sub 带批注之单元格个数()
  • 如果工作表中没有批注,则程序要出错,故本例中使用了“On Error GoTo err”语句,当程序出错时,执行“err”标签处的语句。

实例25统计选区格式为“常规”之单元格个数

Sub 常规格式的单元格个数()
  • G/通用格式:即为常规格式。
  • 可以通过以下方法得到常规格式的名称:右键单击单元格后进入“设置单元格格式”对话框,单击“分类”下的“常规”,再单击“自定义”,
    则右边的“类型”框中将显示出“常规”格式的名称。

实例26分别统计选区中文本与字母、数字个数

Sub 统计选区中文本与字母数字个数()
  • (1)Like:用来比较两个字符串。"[一-龥]“表示从编码“一”到“龥”,即汉字之首尾编码,在此范围之内则是汉字;”[a-zA-Z]“表示小写和大写字母的编码范围;”[0-9]"表示数字编码范围。
  • (2)TypeName:返回对象的类型。类型名称是区分大小写的

实例27统计选区中负数个数

Sub 统计选区中负数个数()
  • Integer:一种变量的数据类型,Integer变量存储为16位(2个字节)的数值形式,其范围为–32768到32767。
    Integer的类型声明字符是百分比符号(%)

实例28将选区公式转换成数值

Sub 将选区公式转换成数值()
    但InputBox只允许手工输入字符,且不带参数校验功能,即输入“ABC”等不规范的区域引用时不给予提示。本例引用区域时为了使用方便利用Application.InputBox函数的Type参数为8,不仅可以使用鼠标选择区域,还可以通过参数校验功能确保返回值是有效的单元格引用。
0
单元格引用,作为一个range对象
  • 列出的Type参数中传递的值可以多个套用。
  • 例如,对于一个可接受文本和数字的输入框,将Type设置为1+2;而返回逻辑值与数字则用1+4等
  • (2)Exit Sub:此语句一般用于中途结束程序。
  • 在本例中的作用是:如果在选择区域框中单击了“取消”按钮,则退出程序,如果不用“Exit Sub”,程序将中途弹出错误提示
Sub 将选区公式转换成数值()

实例29将当前区域公式转换成数值

Sub 将当前区域公式转换成数值()
Sub 将当前区域公式转换成数值()
  • (1)ActiveCell是指当前活动单元格,也是光标所在单元格。如果同时选择了一个区域,则ActiveCell是指选区左上角单元格
  • (2)CurrentRegion表示当前已用区域,是以空行与空列的组合为边界的区域
  • (3)PasteSpecial:将剪贴板中的Range对象粘贴到指定区域中。语法如下:

实例30将数字转换为文本

Sub 将数字转换为文本()
  • NumberFormatLocal:表示单元格数字格式,@符号即表示文本格式。

实例31自动将小写转换为大写

  • (1)Worksheet_Change:工作表事件的一种。本例中表示当修改工作表中B列某单元格数据时执行相应的程序。
  • (2)IsEmpty:返回Boolean值,指出变量是否已经初始化。本例中表示单元格为空时不执行后面的代码。
  • (4)EnableEvents:指定是否启用事件。本例中修改小写字母为大写前禁用事件,否则将进入死循环,在修改完成后恢复
  • (5)UCase:将小写字母转换为大写的函数。

实例32将英文转换为首字母大写

  • Proper:将英文单词首字母大写、其余字母小写的函数。因为是工作表函数,需要添加前缀“WorksheetFunction”。
  • 如果不用工作表函数,也可以用以下VBA方式实现:

实例34将零值替换为空

Sub 将零值替换为空()
  • 第一个参数表示替换的目标,第二个参数表示替换后的新值,第三个参数表示字符匹配方式。
  • 本例表示查找值为“0”,替换值为空(符号""),必须完全匹配才替换。

实例35将区域数据改成以“万”为单位

Sub 将区域数据改成以万为单位()

实例36将“#”号以上标显示

  • (1)Len:返回字符串中字符的数目,或是存储一个变量所需的字节数。
  • (3)Do…Loop:当条件为True时,或直到条件变为True时,重复执行一个语句块中的命令。语法如下:

实例37修改任意字符为上标

Sub 修改任意字符为上标()
  • InputBox:在一个对话框中显示提示,等待用户输入正文或单击按钮,并返回包含文本框内容的String。
  • 语法如下([]符号内的表示可选参数,其余的为必选参数):
  • 其中,prompt表示显示在对话框中的字符串;title表示对话框标题;default表示输入字符的默认值;
  • xpos和ypos表示对话框的XY坐标;最后两个参数指定帮助文件,一般不用。

实例38为任意字符添加下划线

Sub 任意字符添加下划线()
Sub 任意字符添加下划线()
  • Underline:返回或设置应用于字体的下划线类型。

实例39在任意字符上方添加着重符

Sub 在任意字符上方添加着重符()
  • (2)Large:工作表函数,返回第N大的值。
}

大家好,我们今日继续讲解VBA代码,今日讲解的是第44讲,在Excel中输入简单的数据可以使用InputBox函数显示的对话框,但是如果输入的数据类型不匹配时,过程运行时会产生意外错误。为了避免此类情况发生,可以使用另一种获得用户输入的方式——InputBox方法。

InputBox方法显示一个接收用户输入的对话框,返回此对话框中输入的信息,语法如下:

b) Prompt是必需的,作为对话框消息显示的字符串表达式。

c) Title是可选的,作为显示在对话框标题栏中的字符串表达式。如果省略Title参数,将使用默认的标题。

d) Default是可选的,在对话框显示时出现在文本框中的初始值。如果省略Default参数,则文本框为空。

e) Left是可选的,指定对话框相对于屏幕左上角的 x 坐标。

Top是可选的,指定对话框相对于屏幕左上角的 y 坐标。

f) HelpFile和参数HelpContextId是可选的,为对话框提供上下文相关的帮助和编号,如果提供了其中一个参数,则必须提供另一个参数,两者缺一不可。

g) Type是可选的,指定返回的数据类型。如果省略Type参数,对话框将返回文本。

注意点:第一: InputBox方法的语法和InputBox函数的语法相似,最大的区别在于最后一个参数——Type。通过Type参数可以指定返回值的数据类型:0 表示 一个公式;1表示一个数字;2表示文本(字符串);4表示一个逻辑值,例如true或false;8 表示一个单元格引用;16表示一个错误值;64表示一个值的数组

第二:这些数值可以相加使用,如果希望返回数字和文本,可以将Type参数设置为1+2。

第三:InputBox方法与InputBox函数相比,优点是内置的出错处理;InputBox方法和InputBox函数的另一个区别是,当用户单击“取消”按纽时返回False而不是长度为零的字符串。

下面我们看一个实例对上面例子进行讲解:使用InputBox方法输入数据时可以指定数据的类型,如下面的代码所示。

MydInput过程使用InputBox方法显示一个提示用户输入数字的对话框。

在第5行代码中将Type参数值设置为1,这意味着对话框只能输入数值。

第6行到第10行代码,如果用户单击对话框的“确定”按钮,将用户输入的数字写入工作表的A列单元格。如果用户单击对话框的“取消”按钮,则显示一条提示消息。运行MydInput过程将显示一个提示用户输入数字的对话框。

当录入非数字时显示下面的窗口:

2 TYPE 的几个值有什么意义?

}

我要回帖

更多关于 此单元格与列公式不一致 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信