VBAExcel使用来自另一个模块的整数变量
我有
Dim PackageInnerHorizontalwidth As Single
Dim PackageInnerHorizontalwidth As Single
在“Public Sub PackageDimensionsCalculator()”中,这是一些计算的结果。现在我需要在模块“Function EvaluateFormatSketch() As Boolean”中使用结果值“PackageInnerHorizontalwidth”,并将该值返回为“0”,这不是所有计算后的实际结果值。我试着先做那个
全球和公开但没有成功。我知道在我的情况下这不是这样做的方法。
所以我的问题是:如何将“PackageInnerHorizontalwidth”作为模块“Function EvaluateFormatSketch() As Boolean”中的值?
现在我把它作为
Dim PackageInnerHorizontalwidth As Integer
请有人帮我解决这个问题吗?
回答
在过程范围内使用,Dim关键字声明了一个局部变量。
在过程作用域内,只能声明局部变量;局部变量在它们声明的范围内生存和死亡。
如果您需要从多个单一作用域访问变量,您有多种选择:
- 通过将局部变量的声明移动到模块的声明部分,将关键字更改为:变量现在可以从所有模块中的所有过程范围访问,从而将局部变量提升到全局范围。这通常是一个相当糟糕的主意。
Public - 将局部变量提升到模块级别(将其声明移到模块的声明部分),保留
Dim关键字或将其更改为Private:现在可以从该模块中的所有过程范围访问该变量。可能也是一个坏主意。
请注意,Public和Private关键字(以及已弃用的Global关键字)在本地范围内是非法的。
还有其他选择,但在我们研究它们之前,让我们重新看看这个陈述:
在“Public Sub PackageDimensionsCalculator()”中,这是一些计算的结果。
一个Sub程序没有一个“结果”。Sub程序做一些事情,他们不返回任何结果。我们可以通过两种方式让它实际返回结果:
-
ByRefreturn:我们可以声明一个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,请注意具有计算某些内容但不接受任何输入的过程是可疑的。考虑将任何输入重构为参数,让调用者负责获取影响计算的值——如果所有输入和依赖项都作为参数传递,该函数将更容易测试/验证(并最终维护/调试)。
- "That's usually a rather bad idea." - needs bolded, underlined, highlighted, whatever emphasis can be added hahah.