VBA实践:form相关实验1,一打开form就报错怎么办? 表单初始化出问题和解决举例

您所在的位置:网站首页 vba删除行 VBA实践:form相关实验1,一打开form就报错怎么办? 表单初始化出问题和解决举例

VBA实践:form相关实验1,一打开form就报错怎么办? 表单初始化出问题和解决举例

#VBA实践:form相关实验1,一打开form就报错怎么办? 表单初始化出问题和解决举例| 来源: 网络整理| 查看: 265

一 问题:为什么我一打开form就报错?

     和我一样得VBA菜鸟们,在刚接触form表单时,肯定遇到过这样的问题。比如这些报错,往往很笼统,也不告诉你是那一句错了,只是这么个错误代码

运行错误380, 无法设置 rowsource 属性运行错误9, 下标越界运行时错误13,类型不匹配?....等等,各种form初始化时可能的报错

    我刚开始遇到这种问题,总是很烦躁,为啥刚刚还正常能打开得VBA怎么突然就报错了呢?这是要解决得问题,但是原因是什么呢?  让我们开始从终点倒推

   

图1:

图2:

二 原因:form初始化时出了问题 (这才是真正的起点) 2.1 form 初始化  UserForm_Initialize 时出了问题 原因,这才是真正得起点上面得抛出异常,看起来是原因,实际是结果,让我们开始从终点倒推,找到背后得原因吧、 一般刚加载就报错,就是初始化出问题了,检查这一块form一打开就报错,那意味着,form在初始化时(创建得过程中),发生了错误,

图3:

2.2 可能的原因枚举,各种可能 有时候是以前能打开,现在报错,那说明,这一会得过程中,这段form得代码运行得环境出了问题,虽然你可能没注意到。为啥刚刚还正常能打开得VBA怎么突然就报错了呢?比如有如下得可能  form依赖了一些form之外得内容,比如excel里得数据,或者txt等外部数据源刚才这些 数据源 可能改变了,被手动删了,会被其他代码运行修改了!刚刚,切到了其他workbook,非form依赖的数据表没有active! (倒是不可能关闭,因为excel里,form和同一个表的excel表时一起打开了,但是可能没active)我当前没有激活form对应的excel表这个excel表里对应的地方没有数据如果没有选择当前表,经常报下标越界,应该是变量取不到对应的表里的数了可能是,列名修改了,而读了列名索引得内容可能是,数据加了删了东西,导致查找公式里查不到,或返回了错误内容出错,检查公式......等等 UserForm_Initialize 初始化代码里的问题,检查下吧  

2.3 举例子,错误分析

比如,上面我遇到得问题

运行错误380, 无法设置 rowsource 属性 (下面的这个rowsource要读的表的内容,表未active)运行错误9, 下标越界( 我当前打开的不是对应excel,而当前active状态的workbook根本没有这个sheet, Worksheets("bag").Cells(2, 6) ,导致报错,下标越界)

Private Sub UserForm_Initialize()     Me.StartUpPosition = 0     Me.Top = 200     Me.Left = 500           ListBox1.RowSource = "shop!d3:e15"     ’这里报错了!     ListBox1.ColumnCount = 2

...

Private Sub UserForm_Initialize()         index1 = Worksheets("bag").Cells(2, 6)

...

三  如何避免form读excel数据报错问题呢?

3.1  思路1:提前解决这些问题呢? 提前去解决 3.1.1 用户切换到其他非form对应的excel了,先提醒 另外,这个切换也可能是玩家的正常操作而且提醒了也不解决问题了写得这个提醒,有点多余,感觉还是不要了,除非特定情况吧 Private Sub Workbook_Deactivate() MsgBox "form相关EXCEL表失去焦点,再打开可能会报错" '有点多此一举得感觉 End Sub 3.1.2 每次打开每个form时,提前去打开对应的 依赖的数据源excel表,避免出错 这个思路的前提是,出错后,分析知道了错误原因然后再报错之前,先处理,避免走到报错的分支上 '试试,提前打开相关表,每个form打开时都要加,可以避免报错 path1 = ThisWorkbook.Path name1 = ThisWorkbook.Name Workbooks.Open Filename:=path1 & "\" & name1 ' Workbooks("模拟表.xlsm").Open '报错,这个是 语法不对,即使语法对,这样也应该是赋值形式写法

Workbooks.Open Filename:=path1 & "\" & name1workbooks  (参数) 这种一般都要赋值,或者有返回值得写法,虽然这边显示语法报错

 

3.2 思路2:错误捕捉 前辈大佬们,经常用错误捕捉的方法,比我这个提前解决的办法要更好。因为我这个得想到了问题才行,而错误捕捉,没想到得问题也不会引起报错但可以提前发现,可惜我还不太会搞这个,先这样吧,以后学习了补充。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3