【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 ...
随机推荐
- jdk8-四大函数式接口
jdk8四大核心接口 1.Comsumer接口 2.Function函数型接口 3.断言型接口 4.供给型接口 核心接口的子接口
- jquery获取URL的参数和锚点
由于经常会用到替换URL参数值,而网上写的方法代码都太长了,所以在这里写了一个简单的方法,供大家使用. 1)获取url参数 function getUrlParam(name) { var reg = ...
- 日志框架elk 搭建
CENTOS7 安装 NGINX ELK之LOGSTASH ELK之ELASTICSEARCH安装 ELK之KIBANA
- jvm内存配置参数
请看下面题目: 对于jvm内存配置参数: -Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3 其最小内存值和Survior区总大小分别是: a. 51 ...
- 玩转 React 【第03期】:邂逅 React 组件
上期回顾 前文我们讲解了 React 模板 JSX,接着我们继续来看看 React 组件又是如何工作的呢? 组件化开发到了今天已经是大家的共识,在 React 中,组件同样也是组成我们整个项目的基本单 ...
- json pickle xml shelve configparser
json:# 是一种跨平台的数据格式 也属于序列化的一种方式pickle和shevle 序列化后得到的数据 只有python才可以解析通常企业开发不可能做一个单机程序 都需要联网进行计算机间的交互 J ...
- foreman源NO_PUBKEY 6F8600B9563278F6
/etc/apt/sources.list.d/foreman.list # foreman deb http://deb.theforeman.org xenial stable 一条命令解决 ap ...
- 【Python】xpath-1
1.coverage包实现代码覆盖率 (1)pip install coverage (2)coverage run XX.py(测试脚本文件) (3)coverage report -m 在控制台打 ...
- AMAZON数据集
http://snap.stanford.edu/data/amazon/productGraph/categoryFiles/
- Spring架构-01-微服务架构
一.单体架构 所有功能,所有模块都耦合在一个系统里面,如传统的一MVC. 需要重新编译测试,重新部署. 伸缩性差 可靠性差 系统迭代困难 跨开发语言程序低 团队协作麻烦 二.微服务架构 常见架构风格: ...