Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6450|回复: 4

自定义宏的参数问题

[复制链接]
发表于 2011-4-30 13:25 | 显示全部楼层 |阅读模式
5学分
写了个自定义宏如:
Sub 请教( cs1$, cs2$,cs3$)

现在我调用该自定义——请教
sub 调用()
dim arr
arr = Array("A", "Z", "r", "T")
call 请教(“aa”,arr(2),“ok”)
endsub
可arr(2),提示:ByRef参数类型不符


所以请教应该怎么写为好。

另:call 请教(“aa”,”所以”,ok”)这样的形式不要影响调用

最佳答案

查看完整内容

Sub 请教(cs1$, cs2$, cs3$) ' 方法1. 或者改成传值方式,Sub 请教(cs1$, ByVal cs2$, cs3$) Debug.Print cs1, cs2, cs3 End Sub '现在我调用该自定义——请教 Sub 调用() Dim arr arr = Array("A", "Z", "r", "T") Call 请教("aa", (arr(2)), "OK") ' 方法2. 强制类型转换 End Sub
发表于 2011-4-30 13:25 | 显示全部楼层
Sub 请教(cs1$, cs2$, cs3$)   ' 方法1. 或者改成传值方式,Sub 请教(cs1$, ByVal cs2$, cs3$)
    Debug.Print cs1, cs2, cs3
End Sub
'现在我调用该自定义——请教
Sub 调用()
    Dim arr
    arr = Array("A", "Z", "r", "T")
    Call 请教("aa", (arr(2)), "OK") ' 方法2. 强制类型转换
End Sub

评分

参与人数 1 +14 收起 理由
xdwy81129 + 14 再次理解学习了,感谢吕版主

查看全部评分

回复

使用道具 举报

发表于 2011-4-30 13:37 | 显示全部楼层
本帖最后由 那么的帅 于 2011-4-30 13:38 编辑

回复 xdwy81129 的帖子



  1. Sub 请教(cs1$, cs2, cs3$) '修改这里
  2.     MsgBox cs1
  3.     MsgBox cs2
  4.     MsgBox cs3
  5. End Sub
  6. '现在我调用该自定义——请教
  7. Sub 调用()
  8.     Dim arr
  9.     arr2 = Array("A", "Z", "r", "T")  
  10.     Call 请教("aa", arr(2), "OK")
  11. End Sub

复制代码

评分

参与人数 1 +10 收起 理由
xdwy81129 + 10 谢谢学委关注

查看全部评分

回复

使用道具 举报

发表于 2011-4-30 18:58 | 显示全部楼层
本帖最后由 wbzxz 于 2011-5-1 08:36 编辑

回复 吕?布 的帖子

吕老师,您好,我看了您的解释,感觉好像理解啦,我描述一下,您看对不对啊:
楼主的错误所在:

因为在编写带参数的过程的时候,默认参数传递方法方式是按地址传递的(ByRef);在ByRef进行参数传递的过程中,传递过来的变量必须与参数的数据类型一致;楼主的参数定义是字符串型(C2$),但是传递进去的变量是 变体类型Variant;这样,传递进去的变量数据类型与所需数据类型不符,就会出现“ByRef 参数类型不匹配“的错误。




解决的思路有三个:


1、改成值传递方式, ByVal cs2$;


2、在参数两边加上括号,强制改变参数为所声明类型;


3、把CS2声明为变体类型,Sub 请教(cs1$, cs2, cs3$);




请问吕布老师:

为什么按地址传递会发生错误的呢?嘿嘿,请教您。









回复

使用道具 举报

发表于 2011-5-3 09:04 | 显示全部楼层
回复 wbzxz 的帖子

1. 总结的很全面,强制转换时也可以用CStr等C函数.
2. 传址会出错的原因我想是因为VBA为了保证其稳定性,对传址的情况进行了类型显式检查。这样,在代码运行前,如果发现类型不一致,便会报错。传址有时确实是一个危险的动做,但是我们在VBA中感觉不明显也许就是VBA进行这种检查的原因

评分

参与人数 1 +9 收起 理由
wbzxz + 9 谢谢吕布老师啊。

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-24 17:05 , Processed in 0.184759 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表