【问题标题】:VBA Excel Use integer variable from another moduleVBA Excel使用来自另一个模块的整数变量
【发布时间】:2021-03-30 13:30:53
【问题描述】:

我有

Dim PackageInnerHorizontalwidth As Single

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

Dim PackageInnerHorizontalwidth As Single

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

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

现在我有它

Dim PackageInnerHorizontalwidth As Integer

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

【问题讨论】:

标签: excel vba integer


【解决方案1】:

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

在一个过程范围内,你只能声明局部变量;局部变量在它们被声明的范围内生死存亡。

如果您需要从多个范围内访问一个变量,您有多种选择:

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

请注意 PublicPrivate 关键字(以及已弃用的 Global 关键字)在本地范围内是非法的。

还有其他选项,但在我们研究它们之前,让我们重新看看这个声明:

在“Public Sub PackageDimensionsCalculator()”中这是一些计算的结果。

Sub 过程没有“结果”。 Sub 程序做某事,它们不返回任何结果。我们可以使它实际上以两种方式返回结果:

  • ByRef return:我们可以声明一个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,指出有一个计算某些东西但不接受任何输入的过程是可疑的。考虑将任何输入重构为参数,让调用者负责获取影响计算的值 - 如果所有输入和依赖项都作为参数传递,该函数将更容易测试/验证(并最终维护/调试)。

【讨论】:

  • “这通常是个相当糟糕的主意。” - 需要加粗,下划线,突出显示,可以添加任何强调哈哈。
【解决方案2】:

全球性和公开性,但没有成功。我明白这不是 就我而言,这样做的方法。

但确实如此。放:

Public PackageInnerHorizontalwidth As Single

在模块的顶部(在您的函数之外/之前)并在函数中移除它的任何变暗。

【讨论】:

  • 我不能这样做,因为它是 sub 之前计算的结果。它返回“子或函数中的无效属性”错误。如果我将它放在“Function EvaluateFormatSketch() As Boolean”之前,则将其返回为“0”,这不是它的实际值。
  • @Eduards - 跳过公共变量和use a Function
猜你喜欢
  • 1970-01-01
  • 2019-06-27
  • 2017-04-22
  • 1970-01-01
  • 2021-09-10
  • 2021-12-09
  • 1970-01-01
  • 2015-08-27
  • 2017-01-28
相关资源
最近更新 更多