在VBA中访问sub的变量

时间:2011-11-24 23:51:04

标签: variables vba public

我有以下子

Public Static Sub Varib()

Device_ = Sheet1.DeviceType_.Text
Model_ = Sheet1.Model_.Text
Security_ = Sheet1.SecurityGroup_.Text
Catagory_ = Application.Index(Worksheets("Temp_for_varible_lists").Range("b:b"), Application.Match(x, Worksheets("Temp_for_varible_lists").Range("A:A"), 0))

End Sub
实际上它根据用户输入进行并总共产生了一大堆各种数据类型的vaules。

因此,用户从几个复选框,列表框中选择,填写一些文本框并点击提交按钮,此子组件填充了多个变量,然后由应用程序中的其他函数和子函数进行替换。

现在我可以将所有varibles全局化并在那种情感中访问它们。但我希望能有更像我在c#和VB.net上看到的东西

您可以使用

获取值

sub.varible name

上面代码的示例。

Sub Main()

x = Varib.Device_
msgbox(x)

end sub

在VBA中有一种类似的方法吗?

干杯

aaron

2 个答案:

答案 0 :(得分:1)

你所要求的是无法做到的。解决方案是使你的变量全局化(通常是一个坏主意,有一些例外,这种情况不是其中之一)。

一种可能性是创建用户定义的类型:

Type Varib
    Device_ As String
    Model_ As String
    Security_ As String
    Category_ As String
End Type

以及从工作表中填充它的子项:

Sub LoadVaribFromSheet(v As Varib)
    With v
        .Device_ = Sheet1.DeviceType_.Text
        .Model_ = Sheet1.Model_.Text
        .Security_ = Sheet1.SecurityGroup_.Text
        .Category_ = _
            Application.Index(Worksheets("Temp_for_varible_lists").Range("b:b"), _
            Application.Match(x, _
            Worksheets("Temp_for_varible_lists").Range("A:A"), 0))
    End With
End Sub

然后您可以按如下方式使用它:

Sub Main()
    Dim myVarib As Varib
    LoadVaribFromSheet myVarib
    ' Now do stuff with myVarib ...
    MsgBox myVarib.Device_
End Sub

答案 1 :(得分:0)

你可以使用封装来实现这个

Private value As String
Private value1 As String


Public Function setValue(val As String)
value = val
End Function

Public Function setValue1(val As String)
value1 = val
End Function


Public Function getValue() As String
getValue = value
End Function

Public Function getValue1() As String
getValue1 = value1
End Function

-------------------------------------------------------------------------

Sub test()

MsgBox getValue & vbCrLf & getValue1

setValue "myValue"
setValue1 "myValue1"

MsgBox getValue & vbCrLf & getValue1
End Sub