版权声明:本文为博主原创文章。未经博主同意不得转载。 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. jdk8--stream并行流

    stream的并行流要理解一个框架如下: 单线程,多线程和并行流对比 package com.atguigu.java8; import java.util.concurrent.ForkJoinPo ...

  2. ArrayList和LinkedList有什么区别?

    ---恢复内容开始--- ArrayList和LinkedList都实现了List接口,但是: ArrayList是基于索引的数据接口,底层是数组,能够以O(1)时间复杂度随机访问元素.而Linked ...

  3. 牛客国庆集训派对Day5 数论之神

    题目描述 终于活成了自己讨厌的样子. 这是她们都还没长大的时候发生的故事.那个时候,栗子米也不需要为了所谓的爱情苦恼. 她们可以在夏日的午后,花大把的时间去研究生活中一些琐碎而有趣的事情,比如数论. ...

  4. 文件操作---with语句

    with语句 为了避免打开文件后忘记关闭,可以通过管理上下文,即: with open('file','r','encoding='uth-8'') as f: #f为文件句柄 for line in ...

  5. L259

    Few things can feel as crushing as being rejected by someone who you're either dating or romanticall ...

  6. global

    使用关键字“global”你就可以把全局数据导入到一个 函数的局部范围内.

  7. mysql创建用户以及授权

    Mysql新建用户操作 方法一: mysql> insert into mysql.user(Host,User,Password)  values("localhost", ...

  8. puppet确保程序运行

    exec { 'keep-nginx-running' : user => 'root', unless => 'ps -x | grep nginx|grep -v grep', com ...

  9. 莫烦tensorflow(1)-训练线性函数模型

    import tensorflow as tfimport numpy as np #create datax_data = np.random.rand(100).astype(np.float32 ...

  10. vue 之 Virtual Dom

    什么是Virtual Dom Virtual Dom可以看做一棵模拟了DOM树的JavaScript树,其主要是通过vnode,实现一个无状态的组件,当组件状态发生更新时,然后触发Virtual Do ...