VBA Excel使用其他模块中的整数变量



我有

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:现在可以从该模块中的所有过程作用域访问该变量。可能也是个坏主意

请注意,PublicPrivate关键字(以及不推荐使用的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
    
  • 将其更改为FunctionFunction过程有一个目的:获取输入,计算结果,并返回

    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

在模块顶部(在您的功能之外/之前(,并消除功能中的任何调光。

最新更新