明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2978|回复: 12

[求助]VBA中静态变量声明失效?

  [复制链接]
发表于 2007-1-11 10:19:00 | 显示全部楼层 |阅读模式

在过程中定义静态变量

private sub()

Static cn As Double

cn=999

call othersub

end sub

问题:为什么在 call othersub后cn的值又变成了空值

发表于 2007-1-11 14:39:00 | 显示全部楼层

肯定是在othersub过程中修改了cn的值

我测试了一下,没问题

Private Sub ghh()

Static cn As Double

cn = 999
MsgBox cn
Call othersub
MsgBox cn
End Sub


Public Sub othersub()
Dim d As String
End Sub

 楼主| 发表于 2007-1-11 14:48:00 | 显示全部楼层

Private Sub ghh()

Static cn As Double

cn = 999
MsgBox cn
Call othersub
MsgBox cn
End Sub


Public Sub othersub()
Dim d As String

MsgBox cn
End Sub

我的构想是要CN在othersub中值仍是999

在VB中这样写是可以的,但是VBA中cn的值好像被清空了

发表于 2007-1-11 15:21:00 | 显示全部楼层
const cn=999放到前面
 楼主| 发表于 2007-1-11 16:14:00 | 显示全部楼层

我的意思是在othersub中cn的值保持原来的不变

不是说一定是999

发表于 2007-1-11 16:20:00 | 显示全部楼层

Private Sub ghh()

Static cn As Double

cn = 999
MsgBox cn
Call othersub(cn)
MsgBox cn
End Sub


Public Sub othersub(cn as Double)
Dim d As String

MsgBox cn
End Sub

 楼主| 发表于 2007-1-11 16:28:00 | 显示全部楼层

我知道这样可以解决问题,但是在静态变量非常多的时候还是会很麻烦

在VB中直接用static定义就可以让变量在任何过程函数中保持静态,但是VBA可以定义却没有效果

请教解决的办法

发表于 2007-1-11 16:58:00 | 显示全部楼层

在VBA中的某一过程中用static定义的变量,只在该过程函数中保持静态,

如在整个模块中都有效,不如定义成Public变量.

 楼主| 发表于 2007-1-11 17:04:00 | 显示全部楼层
本帖最后由 作者 于 2007-1-11 17:15:37 编辑

Public cn


Sub n()
Static cn
kl= 111
cn = kl

Call m()
End Sub
Sub m()
Dim ss
ss = cn
End Sub

问题还是没有解决了,还是空值

发表于 2007-1-11 17:16:00 | 显示全部楼层

6楼的做法就可以,但不一定要声明为静态变量,普通变量就行,变量多的话用数组或结构体来做参数

建议多看看VB中有关地址传递和值传递

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 20:40 , Processed in 0.187379 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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