版权声明:本文为博主原创文章。未经博主同意不得转载。 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)?

【VBA研究】VBA自己定义函数參数类型不符的错误的更多相关文章

  1. C语言利用va_list、va_start、va_end、va_arg宏定义可变參数的函数

    在定义可变參数的函数之前,先来理解一下函数參数的传递原理: 1.函数參数是以栈这样的数据结构来存取的,在函数參数列表中,从右至左依次入栈. 2.參数的内存存放格式:參数的内存地址存放在内存的堆栈段中, ...

  2. 各种python 函数參数定义和解析

    python 中的函数參数是赋值式的传递的,函数的使用中要注意两个方面:1.函数參数的定义过程,2.函数參数在调用过程中是怎样解析的. 首先说一下在python 中的函数调用过程是分四种方式的.这里且 ...

  3. [debug]重定义默认參数

    编敲代码过程中遇到重定义默认參数的错误,例如以下例所看到的: #include<iostream> #include<stdlib.h> using namespace std ...

  4. error c2572重定义默认參数

    因为想省事.在声明过函数之后直接复制粘贴去实现,结果出现error c2572重定义默认參数 顾名思义.该默认參数被定义多次.在一个文件(或一个作用域)中,仅仅能为形參指定默认 实參一次.在编译的时候 ...

  5. C++容器类对象函数參数问题

    总之中的一个句话:容器类对象作为函数參数,与整数类型作为函数參数的传递特性同样. 验证程序 #include "stdafx.h" #include <iostream> ...

  6. JavaScript的最大函数參数长度和最大栈深度检測

    一般代码也许不会涉及最大參数长度和最大栈深度,但某些特殊场合,检測这两个參数还是有必要的.比如:用递归计算斐波那契数列的第n个值,不了解最大栈深度,难免显得肤浅.又比如:将一串charCode转成St ...

  7. Effective JavaScript Item 55 接受配置对象作为函数參数

    接受配置对象作为函数參数 尽管保持函数接受的參数的顺序非常重要,可是当函数可以接受的參数达到一定数量时.也会让用户非常头疼: var alert = new Alert(100, 75, 300, 2 ...

  8. 【VBA研究】利用DateAdd函数取上月或上年同期的日期

    作者:iamlaosong DateAdd函数返回一个日期.这一日期加上了一个时间间隔.通过这个函数能够计算非常多我们须要的日期,比方上月上年同期日期等. 语法 DateAdd(interval, n ...

  9. cmake函数參数解析

    近期在迁移公司的make系统到cmake上.发现cmake的function參数非常奇怪.比如,假设我们向一个function传递list作为參数,在function中,形參会变成例如以下状况: se ...

随机推荐

  1. 6.3 C++修改字符串

    参考:http://www.weixueyuan.net/view/6392.html 总结: string字符串同样可以像字符串数组那样按照下标逐一访问字符串中的每一个字符,string字符串的起始 ...

  2. 2.19 C++友元函数和友元类

    参考: http://www.weixueyuan.net/view/6350.html 总结: 借助friend关键字将其声明为友元函数,结果,在display函数体内,我们就能访问private属 ...

  3. socket-重叠模型(overlap)

    socket-重叠模型(overlap) 重叠模型的基本设计原理便是让应用程序使用一个重叠的数据结构,一次投递一个或多个Winsock I/O请求.针对那些提交的请求,在它们完成之后,应用程序可为它们 ...

  4. 矩震级Mw与地震矩M0的换算关系

    矩震级实质上就是用地震矩来描述地震的大小.地震矩是震源的等效双力偶中的一个力偶的力偶矩,是继地震能量后的第二个关于震源定量的特征量,一个描述地震大小的绝对力学量,单位为N.m(牛.米),其表达式为: ...

  5. 20165214 2017-2018-2 《Java程序设计》课程总结

    20165214 2017-2018-2 <Java程序设计>课程总结 每周任务链接 预备作业1:我期望的师生关系 预备作业2:C语言基础调查和java学习展望 预备作业3:Linux安装 ...

  6. L258 技术转让

    We will inform you of the weight, measurements, number of cases, cost of the drawings and other docu ...

  7. ios表单上传图片或文件

    http://www.cocoachina.com/bbs/read.php?tid-89985-page-1.html http://www.jianshu.com/p/44629e5bf986 h ...

  8. wsgi&nginx-理解

    WSGI协议 首先弄清下面几个概念:WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...

  9. 2019-03-11-day009-函数定义

    什么是函数 函数就是将许多冗余的代码进行整合统一调用的内存地址 函数怎么定义 def make(): print('掏出手机') print('打开微信') print('摇一摇') print('聊 ...

  10. Java学习笔记32(IO:序列化流)

    对象中的数据 ,以流的形式,写入到文件中保存,过程称为写出对象,对象的序列化 ObjectOutputStream将对象写到序列中,实现序列化 在文件中,以流 的形式,将对象读取出来,过程称为读取对象 ...