【VBA研究】VBA自己定义函数參数类型不符的错误

时间:2022-06-13 06:44:51

版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/iamlaosong/article/details/36871769

作者: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赋值后类型就不正确了。尽管都是字符串,数组变量和单个变量不一样,编译系统就是报错。

找到原因问题就easy攻克了:

方法一:强制转换,用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也存在相同的问题。八阿哥(BUG)?