【原创】VBA学习笔记(7)VBA各种报错和原因备忘

您所在的位置:网站首页 vba编译错误缺少标识符怎么办啊 【原创】VBA学习笔记(7)VBA各种报错和原因备忘

【原创】VBA学习笔记(7)VBA各种报错和原因备忘

2024-07-07 00:20:56| 来源: 网络整理| 查看: 265

0 报错经验的查询 报错,发生在报错的那一行报错,也经常发生在报错的前一行所以debug 要重点看,报错行和报错行的下一行! 报错,也经常发生在报错的前一行的例子 下面这个报错,其实是fn2=dir(fn)  引起的,应该写成fn2=dir(fp) 

 

1  数据错误:如果有时候代码报错,先看看数据是不是有问题 因为VBA代码(函数,公式)涉及的数据,如果有问题也会报错

因为数据引发的代码报错,这算是丧心病狂的报错吗?

例子

range("a;a").specialcells(xlcelltypeformulas,16).select

如果范围内,没有报错单元格,会公式报错

例子

excel公式的vlookup 查询数据记得加false ,而且注意数据源的那几列/行,不要有其他数据污染了。否则一样会出莫名BUG

vlookup("",a:d,2,false)

例子

Sub 查找() Range("H3") = Application.WorksheetFunction.VLookup(Range("I9"), Sheet3.Range("A3:B132"), 2, 0) End Sub

如果无法在  Sheet3.Range("A3:B132") 的第1列里查找到  Range("I9") 的值,也会报错

2 语法错误,比如:写成了;  一个逗号引发的血案 运行错误1004(很可能是符号错误,基础语法错误)

今天因为一个EXCEL范围引用时的 冒号: 打错成 逗号 ; 后,报这个错误。

Rem 标点符号错误导致问题 Debug.Print WorksheetFunction.Sum(Range("a1;a10")) Debug.Print WorksheetFunction.Sum(Sheets("sheet3").Range("a1;a10"))

2.1 VBA方法'range'作用于对象'_global'时失败

Debug.Print WorksheetFunction.Sum(Range("a1;a10"))  会造成这种报错

原因分析

错误原因1  可能只是语法错误,这里不应该是; 而是:MsgBox Application.Sum(Range("a1;c3"))错误原因2: range(i,j) 这张错误语法也不行错误原因3:比较复杂,可以百度

包括其他标点符号写错,都会有这种报错

Debug.Print WorksheetFunction.Sum(Range("sheet3!:a1:a10"))  注意这里sheet3!: 应该为sheet3!

暂时还不明白这个报错的机理

Sub test1001() ' Application.Sum (Range("sheet3!a1;a3")) 'Debug.Print Application.Sum(Range("a1;a3")) Debug.Print Application.Sum(Range("a1:a10")) End Sub

2.2  应用程序定义或对象定义错误

Debug.Print WorksheetFunction.Sum(Sheets("sheet3").Range("a1;a10")) 会造成这种报错  

2.3  函数名,关键字 拼写错误也会有很多问题

如 application     appliacation   aplication等等!

3  明确语句返回的是对象还是变量!     如果是对象,需要要加到方法/属性层

3.1 举例语法:比如这2个语句返回的都是对象,所以后面如果不带方法/属性,就会报错 [b1].Item(10, 3).selectCells(1,1).entireRow.select

3.2 报错举例 报错编译错误,语法错误    [b1].Item(10, 3)属性的使用无效            Range("c3").EntireRow

 

4 变量定义只能在sub function内,不能定义在 外部

5 某些对象的方法,有特定的限制,方法参数错误会导致报错 cells(3,3).delete 不带参数时,默认参数先是 xlup,如果下方无内容,则默认参数为xltoleft或者指定参数cells(3,3).delete(xlup )cells(3,3).delete(xltoleft )但是下面2种写法是错误的cells(3,3).delete shift:xldown    或者  cells(3,3).delete(xldown )cells(3,3).delete shift:xltoright  或者  cells(3,3).delete(xltoright)

6  关于 二义性错误

可能是 模块/脚本 内不同地方的变量同名了,但没声明过,比如2个sub中甚至可能是多个EXCEL打开时,里面的变量重复一个更准确的解决办法  在自定义类型前加 模块名,就不会重名了~Dim A As MDL_UTIL.myType   Rem 不同函数和过程里的参数名相同,在VBA里经常报二义性 Rem 所以尽量用不同名字的参数,比如 main1里别用a,b了,而用x,y Sub test1(ByRef a) '参数默认是按ref调用 Debug.Print "test1被调用" Debug.Print "a=" & a a = 1 Debug.Print "a=" & a End Sub Sub test2(ByVal b) Debug.Print "test2被调用" Debug.Print "b=" & b b = 2 Debug.Print "b=" & b End Sub Sub main1() Debug.Print "执行main1" Debug.Print "x=" & x Debug.Print "y=" & y x = 3 y = 4 Debug.Print "x=" & x Debug.Print "y=" & y Debug.Print "开始调用" test1 x test2 y Debug.Print "调用结束" Debug.Print "x=" & x Debug.Print "y=" & y End Sub

7   当前范围内的声明重复

8  自动化错误的解决办法

自动化错误-Excel VBA程序开发-ExcelHome技术论坛 -

vba小程序报"自动化(Automation)错误如何处理?_百度知道

http://www.excelpx.com/thread-290493-1-1.html

运行时错误'-2147286917(8003007b)': 自动化(Automation)错误 ,求解决-Excel VBA程序开发-ExcelHome技术论坛 -

9VBA有时候报错不准,需要关闭VBE再开 比如报错行,错了,比如报错的 错误号 错误

10  报错:不能取得类 worksheetfunction的sum属性

这种问题一般都是因为用了工作表函数,遇到有错误数据时,健壮性不够 worksheetfunction.sum() worksheetfunction.match()   一般来说 用application类下的函数就行 application.sum() application.match()  

11 报错 方法 range作用于对象_global时失败

Range(Range("w65536").End(xlUp).Row + 1) = "总计" 这种range(行号+1) 必然是语法错误,应该写成 range("v" & ()行号+1)) 才行

下表越界问题

数组或区域的

1维数不对

2 边界情况的index不对

比如区域内arr的index最小得是1,而默认数组arr的index是0

不能取得match属性 Application.Match()    找不到匹配的内容,但不会报错,只会返回错误值WorksheetFunction.Match()   找不到匹配的内容,会直接报错跳出

出错的例子,这个原因是什么?

Rem 接下来想试验几个 从其他表读表名? 会报告数据源链接更新的问题 Sub t3() Application.DisplayAlerts = False '消除警告 Dim wb As Workbook Dim sh As Worksheet Dim i As Integer i = 1 Set wb = Workbooks.Open("C:\VBA\100.xls") For Each sh In wb.Worksheets 'for each worksheet in wb 不行,变量不要用保留字 也不能 in wb Do While wb.Sheets("create").Cells(i, 1) "" If sh.Name = wb.Sheets("create").Cells(i, 1) Then sh.Delete End If i = i + 1 Loop Next Application.DisplayAlerts = True '重开警告 End Sub

这个很可能是字典的后期绑定导致的问题

为什么报错:property let 过程未定义

Rem Debug.Print dict_keys(0) 直接写就报错。??

原来前面要放个变量   如果加载scrrun.dll 可以不放变量 运行d.keys.(1)

字典 d.keys() 出现property let未定义-Excel VBA程序开发-ExcelHome技术论坛 -

数组下标越界

 引用了不存在的数组元素。   下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。检查数组的声明以确认其上界和下界。若使用的是重新指定范围的数组,应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查变量名的拼写。   声明数组时没有指定元素的数目。   引用了不存在的集合成员。 试着使用 For Each...Next 结构代替指定元素下标。 使用速写形式的下标,结果指定了错误的元素。   下标越界不存在对应的工作薄、工作表名称是否写正确。

语法错误,VBE的预览检查语法错误,虽然没报错,但是没有自动首字母大写就意味着有错误

VBA的语法错误,VBE没有把第1个首字母大写就应该看出来    char(13) 是错误的

 报错处理 VBA 未定义的子类

       可能1 各种函数名,方法名,拼写错了,系统没有这个函数方法名,或者是自己也没自定义这个方法名。

      可能2:宏和所使用的表的,位置不对,宏没有放在这个表里

对象变量 或 with 块变量未设置



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭