【原创】VBA学习笔记(7)VBA各种报错和原因备忘 |
您所在的位置:网站首页 › vba编译错误缺少标识符怎么办啊 › 【原创】VBA学习笔记(7)VBA各种报错和原因备忘 |
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") 的值,也会报错 今天因为一个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! 暂时还不明白这个报错的机理 Debug.Print WorksheetFunction.Sum(Sheets("sheet3").Range("a1;a10")) 会造成这种报错 如 application appliacation aplication等等! 3 明确语句返回的是对象还是变量! 如果是对象,需要要加到方法/属性层 3.1 举例语法:比如这2个语句返回的都是对象,所以后面如果不带方法/属性,就会报错 [b1].Item(10, 3).selectCells(1,1).entireRow.select 3.2 报错举例 报错编译错误,语法错误 [b1].Item(10, 3)属性的使用无效 Range("c3").EntireRow4 变量定义只能在sub function内,不能定义在 外部 自动化错误-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 出错的例子,这个原因是什么? 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) 是错误的 可能1 各种函数名,方法名,拼写错了,系统没有这个函数方法名,或者是自己也没自定义这个方法名。 可能2:宏和所使用的表的,位置不对,宏没有放在这个表里 对象变量 或 with 块变量未设置 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |