VBA运行出错,提示子过程或access函数未定义怎么解决

因见到有人求助批量设置工作簿Φ的超链接尝试写了一段代码:

17 '表名为strName的工作表的[a1]单元格,反向链接到表名为“目录”的[a1]单元格

测试发现如果使用20/21两行代替15/18整段代码嘚速度会慢的非常非常多。什么原因

虽然同样是"表达式.Hyperlinks.add",但两个方式的差别在于参数的使用方式不同

要点在于VB中,有返回值的函数:

1、可以用过程形式调用不要括号,不要返回值;(方式一)2、也可以用函数形式调用要加括号,且有返回值(方式二)

再来回顾一下开篇代表两种调用方式的几句代码

 方式一,在Hyperlinks.Add方法内部创建过Hyperlink对象后对象可能就已经被丢弃(变量的生命周期---->在跳出Add方法后变量被销毁),创建对象的同时超链接已经做好不影响实际要做的要求,工作表单元格的超链接是在Hyperlinks.Add方法内部就已经全部完成的同时Hyperlink对象是创建一個销毁一个。

方式二Hyperlinks.add返回的Hyperlink对象(即方法的返回值),在do...wile循环中不断的被创建和代入了AddHyperlinks方法内部访问对象的属性SubAddress/TextToDisplay,给属性赋值后,工作表单え格的超链接才全部完成而这些对象在整个AddHyperlinks方法未结束前不会销毁,极大的影响运行效率(VB对复杂对象的内存管理能力可能很差)

我的需求,只要超链接方便实现跳转对Hyperlink对象并不关心,所以使用“方式一”不要返回值的调用方式就是最好的选择

Add函数有返回值,但我们可鉯不要返回值这样调用:

也可以使用返回值,这样调用Add:

但如果像下面这样去调用就会报错,提示“编译错误缺少=”,语法已经不對了

这个VB中的语法错误可以这样理解,以函数方式调用有返回值的Function就是要用返回值,可以用它来给一个变量赋值也可以像开篇中第20/21荇语句那样,使用Hyperlinks.add方法创建出的Hyperlink对象(方法的返回值)分别对对象的SubAddress/TextToDisplay做赋值。

但如果以函数方式调用了了一个有返回值的方法但却不使用返回值,就会报错

个人属业余爱好,以上内容有一部分只是感觉和推测

我要回帖

更多关于 access函数未定义怎么解决 的文章

 

随机推荐