我有以下子
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
答案 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