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

您所在的位置:网站首页 vba编译错误缺少标识符怎么办啊视频 【VBA研究】VBA自定义函数参数类型不符的错误

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

2024-07-12 10:26:56| 来源: 网络整理| 查看: 265

作者: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也是这样。

 

 



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭