2 dragon lzw dragon_lzw 于 2016.09.25 02:37 提问

VB执行动态代码时变量的作用域问题 5C

小弟一个程序中需要实现动态代码,即在程序运行过程中生成代码,写成字符串,再用ExecuteStatement来执行字符串中的代码,如下所示,测试后发现可以运行,但是里面的变量的值不对,估计是作用域出了问题,如下,在ExecuteStatement “a=5”之后,外面更改了a=3,再运行ExecuteStatement "msgbox a"时a依旧是5,需求是在ExecuteStatement中更改了变量的值,在外面也跟着更改,而在外面更改了变量的值之后也一样,不知道该如何处理,非常感谢!

Private Sub Command1_Click()
Dim a As Integer
Dim ob As Object
Set ob = CreateObject("scriptcontrol")
ob.Language = "VBscript"
ob.ExecuteStatement "a = 5"
a = 3
ob.ExecuteStatement "msgbox a"

1个回答

caozhy
caozhy   Ds   Rxr 2016.09.26 00:16
 http://www.cnblogs.com/rosesmall/archive/2012/11/15/2771585.html

计算带变量的表达式
    Private Sub Command1_Click()
      '执行一条 scripting 语句例子
       x = 10
       ScriptControl1.ExecuteStatement "x=" & x '执行一条 scripting 语句,将值 10 赋给变量 x
       S = ScriptControl1.Eval("(x-1)^2")
       MsgBox S
dragon_lzw
dragon_lzw 感谢回复,但这种方法还是没法解决我的问题,我目前遇到的问题是有很多个变量,a,b,c,d,x,y,z......我要给变量赋值,但事先不知道哪个变量赋什么值,如你举的例子中事先并不知道是x=10,需要在程序运行过程中动态判断,我又不想写很多if...来判断,因为有上百个变量,所以想到是否可以通过动态代码来实现,即程序运行过程中判断哪个变量赋什么值后生成动态代码来执行,但就遇到执行动态代码后变量的值并没有赋给外层的程序,而只是在内层的作用域里,这就没意义了,不知道是否有其他方法或者思路可以解决这个问题的,多谢!
接近 2 年之前 回复
dragon_lzw
dragon_lzw 感谢回复,但这种方法还是没法解决我的问题,我目前遇到的问题是有很多个变量,a
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
变量的声明和作用域——VB
一、声明变量 变量在使用前,必须在代码中进行声明,即创建该变量。 在使用变量之前,首先需要声明变量。就是说,必须事先告诉编译器在程序中使用了哪些变量,及这些变量的数据类型以及变量的长度。这是因为在编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,这样可以优化程序的执行。 声明变量有两种方式:隐式声明、显式声明。 隐式声明:变量可以不经声明直接使用,此时VB给该变量
静态作用域和动态作用域
所谓的作用域就是指某段程序文本代码。一个声明起作用的那一段程序文本区域,则称为这个声明的作用域。静态作用域是指声明的作用域是根据程序正文在编译时就确定的,有时也称为词法作用域。而在采用动态作用域的语言中,程序中某个变量所引用的对象是在程序运行时刻根据程序的控制流信息来确定的。   大多数现在程序设计语言都是采用静态作用域规则,而只有为数不多的几种语言采用动态作用域规则,包括APL、Sn
动态执行 VB.NET 和 C# 代码
有时候我们需要尝试动态地与一些代码进行交互,而不是只能执行程序内已编死的代码,那该怎么办呢? 我首先推荐各种脚本语言,如Javascript、Lua、Python等等,这些脚本语言有很多优秀的第三方类库,可以很方便的与 .NET 系统集成,让我们的程序中执行动态代码。 但如果你一定想用VB.NET或者C#的代码来运行一段程序,这里就要用到动态编译的功能了。 下面是我写的两个实例,你只需要在窗
for循环内使用闭包,变量的作用域详解
循环内使用闭包的其实要根据作用域来解释 首先js中是没有“块状作用域”的,请看下面java例子 Java code ? 1 2 3 4 5 6 7 8      //scope1 作用域1      for (int i = 0; i 10; i++){         //
VB.NET变量的作用域
Dim声明的变量只有在程序执行的时候才会存在。           Public声明的变量在整个应用程序中均有效。       Static声明的变量为一个局部变量,即使在程序结束以后,变量的值也仍然保存在内存中。      Shared声明的变量为共享变量,且所有类或者结构的实例共亨同一个变量。      其他的那些不在过程内部,而在窗体、标准或者类模块段的声明中声明的变量对模块
VB动态添加执行代码完整版(一)
VB6动态添加代码的教程演示以及下载地址,为那些喜欢用脚本拓展程序功能的新手而写,其他人士也可以看看. 源码可以在我的CSDN下载中心下载: 最新更新: http://download.csdn.net/source/2619000 最旧文件: http://download.csdn.net/source/2617537
VB动态添加执行代码完整版(二)
VB6动态添加代码的教程演示以及下载地址,为那些喜欢用脚本拓展程序功能的新手而写,其他人士也可以看看. 源码可以在我的CSDN下载中心下载: 最新更新: http://download.csdn.net/source/2619000 最旧文件: http://download.csdn.net/source/2617537
VB 动态添加执行代码完整版(最新更新)
排除了原版的繁杂和表面 更深入一点介绍呢个东西 希望对新手和不会这个的 有帮助
动态变量和静态变量的区别
动态变量和静态变量的区别:1、存储位置动态变量:存储在内存出栈数据区静态变量:存储在全局数据区(静态数据区)2、生命期动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数范围变量将失效静态变量:程序结束时才释放3、作用域动态变量:同样的要根据你定义的位置才能确定,和第二点的一样静态变量:当前文件中有效
词法作用域与动态作用域的区别
在计算机程序设计中,变量是名字(name)与实体(entity)的绑定(binding)。一段程序代码中所用到的名字并不总是有效(或者说:可用的),而限定这个变量名字具有可用性的代码范围就是这个名字的作用域。不同的程序设计语言可能有不同的作用域和名字解析设计。同一语言内也可能存在多种作用域,随实体的类型变化而不同。作用域类别影响变量的绑定方式,根据语言使用静态作用域(词法作用域)还是动态作用域变量