注册 登录
编程论坛 VB6论坛

请问,能否用全局变量名的字符串,返回该变量的值?谢谢!

mansohu 发布于 2015-07-23 13:11, 638 次点击
比如以下代码:
public A
Public B

sub XXXX
    A=1
    B=2
    '请问能否编写一个以下功能的函数:
    C=转换("A")
    D=转换("B")
    debug.print C    'C 的结果是 1
    debug.print D    'D 的结果是 2
end sub

function 转换(变量名字符串 as String)
    ???
    ???
    ???
end Function

不知能否实现以上功能 谢谢!
5 回复
#2
lianyicq2015-07-23 13:35
没看明白是什么意思。
按模块中
程序代码:
Public A As String
Public B As String
Function convert(str As String) As Integer
  Select Case str
    Case Is = "1"
      convert = 1
    Case Is = "2"
      convert = 2
  End Select
End Function
窗体中
程序代码:
Private Sub Command1_Click()
  Dim C As Integer
  Dim D As Integer
  A = "1"
  B = "2"
  C = convert(A)
  D = convert(B)
  Debug.Print C
  Debug.Print D
End Sub
这会有什么问题

#3
梦千殇2015-07-23 14:45
回复 楼主 mansohu
可以实现 你说的功能 我建议吧全局变量写在库文件中  这样也方便调用 只需每次 对全局变量赋值即可 希望我说的对你有帮助
#4
风吹过b2015-07-23 15:10
有二种实现方法。
一种就是2楼的方法,单独写个函数,负责多分支选择返回结果。

一种就是使用 callbyname 函数,把这个全局变量封装到 类里面。

优缺点:
第一种:速度快,兼容性好,代码易懂、易读。如果变量名经常要变来变去,或者要增减,那么这个函数的内容 维护是一个问题。
第二种:理解了原理后,代码简单,扩展性不错,维护起来简单一点。但速度慢。

------------------------
最近看了关于VB的反汇编的文章,VB程序里堆满了大量的内部函数,简单变量使用函数还少一点,越是复杂的类型就越使用的函数多一点,严重影响速度 。
#5
flkj20152015-07-24 20:53
像4楼说的那样 ,用CallbyName函数
程序代码:
Option Explicit

Public str1 As String       '看成本窗体的成员,不过外界可以引用
Public str2 As String       '看成本窗体的成员,不过外界可以引用

Private Function RefStr(str As String) As String
    RefStr = CallByName(Me, str, VbGet)
End Function

Private Sub Command1_Click()
    str1 = "one string"
    str2 = "other string"
    MsgBox RefStr("str1")   '通过字符串引用变量
End Sub

#6
wmf20142015-07-24 21:52
全局变量不就是全局有效的吗?
1