【VBA研究】VBA自己定义函数參数类型不符的错误
版权声明:本文为博主原创文章。未经博主同意不得转载。 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自己定义函数參数类型不符的错误的更多相关文章
- C语言利用va_list、va_start、va_end、va_arg宏定义可变參数的函数
在定义可变參数的函数之前,先来理解一下函数參数的传递原理: 1.函数參数是以栈这样的数据结构来存取的,在函数參数列表中,从右至左依次入栈. 2.參数的内存存放格式:參数的内存地址存放在内存的堆栈段中, ...
- 各种python 函数參数定义和解析
python 中的函数參数是赋值式的传递的,函数的使用中要注意两个方面:1.函数參数的定义过程,2.函数參数在调用过程中是怎样解析的. 首先说一下在python 中的函数调用过程是分四种方式的.这里且 ...
- [debug]重定义默认參数
编敲代码过程中遇到重定义默认參数的错误,例如以下例所看到的: #include<iostream> #include<stdlib.h> using namespace std ...
- error c2572重定义默认參数
因为想省事.在声明过函数之后直接复制粘贴去实现,结果出现error c2572重定义默认參数 顾名思义.该默认參数被定义多次.在一个文件(或一个作用域)中,仅仅能为形參指定默认 实參一次.在编译的时候 ...
- C++容器类对象函数參数问题
总之中的一个句话:容器类对象作为函数參数,与整数类型作为函数參数的传递特性同样. 验证程序 #include "stdafx.h" #include <iostream> ...
- JavaScript的最大函数參数长度和最大栈深度检測
一般代码也许不会涉及最大參数长度和最大栈深度,但某些特殊场合,检測这两个參数还是有必要的.比如:用递归计算斐波那契数列的第n个值,不了解最大栈深度,难免显得肤浅.又比如:将一串charCode转成St ...
- Effective JavaScript Item 55 接受配置对象作为函数參数
接受配置对象作为函数參数 尽管保持函数接受的參数的顺序非常重要,可是当函数可以接受的參数达到一定数量时.也会让用户非常头疼: var alert = new Alert(100, 75, 300, 2 ...
- 【VBA研究】利用DateAdd函数取上月或上年同期的日期
作者:iamlaosong DateAdd函数返回一个日期.这一日期加上了一个时间间隔.通过这个函数能够计算非常多我们须要的日期,比方上月上年同期日期等. 语法 DateAdd(interval, n ...
- cmake函数參数解析
近期在迁移公司的make系统到cmake上.发现cmake的function參数非常奇怪.比如,假设我们向一个function传递list作为參数,在function中,形參会变成例如以下状况: se ...
随机推荐
- Linux3.10.0块IO子系统流程(2)-- 构造、排序、合并请求
Linux块设备可以分为三类.分别针对顺序访问物理设备.随机访问物理设备和逻辑设备(即“栈式设备”) 类型 make_request_fn request_fn 备注 SCSI 设备等 从bio构 ...
- AMR11A - Magic Grid
Thanks a lot for helping Harry Potter in finding the Sorcerer's Stone of Immortality in October. Did ...
- 实力封装:Unity打包AssetBundle(四)
→→前情提要:窗口初现←← 让用户选择要打包的文件 时至今日,我们选择打包文件的方式依然是在Project面板或Hierarchy面板中用鼠标点选.现在既然有了窗口,我们自然希望可以将所有文件罗列在窗 ...
- 5.Python爬虫入门五之URLError异常处理
大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...
- Linux 配置selenium + webdriver 环境
1.ubuntu 自带了python, 可以打开终端输入python 回车后如果显示版本信息就说明已经安装 2.安装安装python setup tools apt-get install pytho ...
- L253 Valentine's Day
Are you ready for Valentine's Day, my fellow stargazers? Not sure if you know this, but the astrolog ...
- mac下python2.7升级到3.6
1. 前言 Mac系统自带python2.7,本文目的是将自带的python升级到3.6版本. 网上有本多的做法是让python2.7和python3.X两个版本共存,博主并不知道,是两版本共存好,还 ...
- python,monkey-patch【猴子补丁】
用来运行时动态修改已有的代码,而不需要修改原始代码,在gevent[协程]中.会在开头的地方gevent.monkey.patch_all(),把标准库中thead.sockcet等给替换掉,这样我们 ...
- pycharm 永久解封
第一步 c:\windows\system32\drivers\etc 命令行输入这个 第二步 把host文件复制到桌面 第三步 记事本打开host 第四步 在最下面添加 ...
- Java学习笔记22(List接口)
List接口继承自Collection接口,自身具有三大特点: 1.有序集合:存入和取出的顺序一致: 2.此接口的用户可以对每个元素插入位置进行精确控制:可以通过索引操作元素 3.可以存储重复元素 L ...