对于刚才那道vb题您的解答还有几点不懂,另外提问。

1)就您的回答,传址的时候数据类型不符会有提示,那么传值是不是就不会有了,如原题的Y?2)再就你说的第三条关于模块级变量其实我有点没搞懂-_-||,麻烦能不能再多举几个例... 1)就您的回答,传址的时候数据类型不符会有提示,那么传值是不是就不会有了,如原题的Y?
2)再就你说的第三条关于模块级变量其实我有点没搞懂-_-||,麻烦能不能再多举几个例子啥的讲讲?谢谢。。
展开
 我来答
unsamesky
2013-07-22 · TA获得超过2735个赞
知道小有建树答主
回答量:859
采纳率:100%
帮助的人:433万
展开全部
第一问:传址的时候因为是将变量的地址直接传递给参数,这个时候涉及到两个内存地址的大小和类型,所以如果类型不匹配,就会产生错误提示。而对于传值来说,就没有这个限制,因为你传递的仅仅是“值”。但是传值不是说就不会产生错误,例如:
Dim X as String
X = "A"
Sub Proc(byval a as Integer)
那么:Call Proc(X)
这个时候就会产生类型不匹配的错误。因为参数a是一个整型变量,如果你将一个字符串变量赋值给他就会产生错误,这个跟你变量类型不匹配的定义是一样的,例如
Dim x as Integer
x = "A"
这个也会产生类型不匹配错误一样。

所以,正确的定义变量和参数类型,是VB编程良好的习惯之一!!要恪守准则,就不容易出错!

第二问:关于模块级变量,他的作用域是整个模块,该变量随着模块的卸载或者退出才消失。我们先将你的代码进行简化:
Private X As String
Private Sub Command1_Click()
X = 5
End Sub
Private Sub proc(ByVal a As Integer, ByVal b As Integer)
MsgBox X
X = 5 * X
Msgbox X
End Sub
通过上面的代码,我们可以得到弹出一个窗口,显示的结果为5。后来显示的结果为25这个就是不断的调用和修改模块级变量的结果。

我知道你实际的疑问是在ByRef和ByVal的区别,你可以参看我以前给别人解答的示例:
http://zhidao.baidu.com/question/557053844?&oldq=1
来自:求助得到的回答
wu_kang_lin
2013-07-22 · TA获得超过170个赞
知道小有建树答主
回答量:490
采纳率:50%
帮助的人:315万
展开全部
Option Explicit 在原代码文档中的第一行写入后,所有变量将会强制性检测是否声明。

1:数据类型不符在进行参数传递时,都会有提示,但是声明为变体时,则是不会的。

2:变量声明方式:关键字:dim ,private , public
1:dim 适用于,窗体,过程,函数,中进行变量声明。

dim a as string
‘窗体中声明时是放在所有代码的最前面。在本窗体中所有过程与函数中都可以使用这个变量,但是在其它窗体中是不可以访问到这个变量。这就是窗体(模块)级变量。

private Sub Main() ‘过程中声明或者函数中 ( private function moveObject() )
dim a as string '此 a 变量与上面的 a 虽然是一样的。但是适用范围不同。它只在这个过程中或函数中适用。不会与窗体 a 发生冲突。这个就是过程变量。
end sub

public a as string
‘这个变量声明是在标准模块中进行声明的。它能被整个系统中的过程,函数,变量,使用与访问。在使用中它的值也会随时发生变化。这就是全局变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式