VBAExcel使用来自另一个模块的整数变量

我有

Dim PackageInnerHorizontalwidth As Single
Dim PackageInnerHorizontalwidth As Single

在“Public Sub PackageDimensionsCalculator()”中,这是一些计算的结果。现在我需要在模块“Function EvaluateFormatSketch() As Boolean”中使用结果值“PackageInnerHorizo​​ntalwidth”,并将该值返回为“0”,这不是所有计算后的实际结果值。我试着先做那个

全球和公开但没有成功。我知道在我的情况下这不是这样做的方法。

所以我的问题是:如何将“PackageInnerHorizo​​ntalwidth”作为模块“Function EvaluateFormatSketch() As Boolean”中的值?

现在我把它作为

Dim PackageInnerHorizontalwidth As Integer

请有人帮我解决这个问题吗?

回答

在过程范围内使用,Dim关键字声明了一个局部变量

在过程作用域内,只能声明局部变量;局部变量在它们声明的范围内生存和死亡。

如果您需要从多个单一作用域访问变量,您有多种选择:

  • 通过将局部变量的声明移动到模块的声明部分,将关键字更改为:变量现在可以从所有模块中的所有过程范围访问,从而将局部变量提升到全局范围。这通常是一个相当糟糕的主意。Public
  • 将局部变量提升到模块级别(将其声明移到模块的声明部分),保留Dim关键字或将其更改为Private:现在可以从该模块中的所有过程范围访问该变量。可能也是一个坏主意。

请注意,PublicPrivate关键字(以及已弃用的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.

以上是VBAExcel使用来自另一个模块的整数变量的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>