我有
Dim PackageInnerHorizontalwidth As Single
在";Public Sub-PackageDimensionsCalculator(("这是一些计算的结果。现在我需要使用得到的值";PackageInnerHorizontalwidth";在"模块"中;函数EvaluateFormatSketch((为布尔值";并且它将该值返回为"0";0";这不是所有计算之后的实际结果值。我试着做第一个
Dim PackageInnerHorizontalwidth As Single
全球公开,但没有成功。我明白,在我的情况下,这不是这样做的方式。
所以我的问题是:如何获得;PackageInnerHorizontalwidth";作为模块"中的值;函数EvaluateFormatSketch((是否为布尔型;?
现在我把它作为
Dim PackageInnerHorizontalwidth As Integer
有人能帮我做这个吗?
在过程范围内使用,Dim
关键字声明一个局部变量。
在过程范围内,只能声明局部变量;局部变量live&在声明的范围内死亡。
如果您需要从多个作用域访问变量,您有几个选项:
- 通过将局部变量的声明移动到模块的声明部分,将关键字更改为
Public
,将局部变量提升到全局范围:现在可以从所有模块中的所有过程范围访问该变量。这通常是个坏主意 - 将局部变量提升到模块级(将其声明移动到模块的声明部分(,保留
Dim
关键字或将其更改为Private
:现在可以从该模块中的所有过程作用域访问该变量。可能也是个坏主意
请注意,Public
和Private
关键字(以及不推荐使用的Global
关键字(在本地作用域中是非法的。
还有其他选择,但在我们研究它们之前,让我们重新看看这句话:
In;Public Sub-PackageDimensionsCalculator((">,这是一些计算的结果
Sub
过程不具有";结果";。Sub
过程执行某些操作,它们不会返回任何结果。我们可以使它实际上通过两种方式返回结果:
-
ByRef
返回:我们可以声明一个ByRef
参数,并使用它来";返回";结果:Public Sub PackageDimensionsCalculator(ByRef outResult As Single) '...do the calculations... outResult = ... ' <~ assign the return value before procedure exits! End Sub
-
将其更改为
Function
。Function
过程有一个目的:获取输入,计算结果,并返回:Public Function PackageDimensionsCalculator() As Single '...do the calculations... PackageDimensionsCalculator = ... ' <~ assign the return value before procedure exits! End Sub
现在EvaluateFormatSketch()
可以通过调用函数来获取值:
Public Function EvaluateFormatSketch() As Boolean
Dim pckgDimensions As Single
pckgDimensions = PackageDimensionsCalculator
'return a Boolean value by assigning to the function identifier:
EvaluateFormatSketch = pckgDimensions > 0
End Function
或者使用ByRef
返回:
Public Function EvaluateFormatSketch() As Boolean
Dim pckgDimensions As Single
PackageDimensionsCalculator outResult:=pckgDimensions
'return a Boolean value by assigning to the function identifier:
EvaluateFormatSketch = pckgDimensions > 0
End Function
考虑重命名PackageDimensionsCalculator
,使其名称以一个动词开头,例如CalculatePackageDimensions
,注意有一个计算但不接受任何输入的过程是可疑的。考虑将任何输入重构为参数,让调用者负责获取影响计算的值——如果函数的所有输入&依赖关系作为参数传递。
全局和公共,但没有成功。我知道这不是在我的情况下这样做的方法。
但确实如此。Put:
Public PackageInnerHorizontalwidth As Single
在模块顶部(在您的功能之外/之前(,并消除功能中的任何调光。