【VBA研究】VBA自定义函数参数类型不符的错误 |
您所在的位置:网站首页 › vba编译错误缺少标识符怎么办啊视频 › 【VBA研究】VBA自定义函数参数类型不符的错误 |
作者:iamlaosong 1、问题提出 编程中发现一个问题,系统总是提示编译错误,ByRef 参数类型不符, 可实际上参数定义没问题,原因在哪儿呢? 2、问题环境 假定函数定义如下: Function get_kind(addr As String) As Integer ...... End Function 调用过程: Sub check_address() Dim addr, new_addr(10000) As String ...... addr = new_addr(i) ...... kk = get_kind(addr) ...... End Sub 3、问题原因 addr赋值后类型就不对了,虽然都是字符串,数组变量和单个变量不一样,编译系统就是报错。 找到原因问题就容易解决了: 方法一:强制转换,用Cstr(addr) 方法二:换个变量,先赋值myaddr=addr,再调用kk = get_kind(myaddr) 4、真正原因 本以为找到了原因,这篇文章成文后很久(2014-7-28),偶然情况下,才找到真正的原因。 其实上面的方法虽然解决了问题,但没有找到真正的原因,真正的原因是自定义函数的参数必须单独定义,不能多个变量放在一起定义,上面的方法二中myaddr之所以成功,就是因为它是单独定义的,如果后面再加一个变量,同样会出错,也就是说每个参数都要单独定义,一次一个,例如: Dim addr As String 实际实验还发现,不一次一个也可以,但是要把参数变量放在最后,例如: Dim str1,str2,addr As String 即:定义参数变量类型时类型说明必须紧跟在变量之后,中间不能有其它变量。研究发现,VB6.0也存在同样的问题。 其实真正的原因是没有吃透dim的使用方法。 dim定义变量类型必须是一个一个的来,放在一起的实际效果是只有最后一个变量定义了类型,前面的变量没有定义类型,就是变体型(variant),例如: Dim addr1, addr2, addr3 As String, Num As Integer Dim addr1 As String, addr2 As String, addr3 As String, Num As Integer 上面第一条语句中的addr1和addr2就是变体型(variant),addr3是字符型。正确的写法是第二行语句。 有这样的误解是因为最早用C语言的时候都是一行定义多个变量,想当然的以为VB也是这样。
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |