VBA:为其他潜艇使用公共变量

Posted

技术标签:

【中文标题】VBA:为其他潜艇使用公共变量【英文标题】:VBA : Using Public variables for other subs 【发布时间】:2016-12-23 21:31:07 【问题描述】:

Excel-VBA。我想创建一个变量,稍后我将在其他几个潜艇中使用它。在关于此的其他问题之后,我公开声明了变量

Public Counter As Integer

然后,我继续使用 sub 为变量赋值

Sub Count()
Set sh2= ActiveWorkbook.Sheets("Sheet2")
Set sh1 = ActiveWorkbook.Sheets("Sheet1")
Dim rng As Range
Dim trng As Range
Set trng = sh2.Range("A4:HV4")

For Each rng In trng
    If rng.Value = "Name" Then
    Counter = Range(rng, rng.End(xlToLeft)).Columns.count
    End If
Next rng

如果我尝试在同一个 sub 上测试哪个值 count 具有例如

sh1.range("B1").value = counter

我得到了正确的号码。

但是,一旦我尝试在另一个 sub 上调用它,值就是 0!

Sub Test()

Range("F1").Value = counter

end sub 

我也尝试在我的测试子上调用 Count 子,但也没有结果。

有什么想法吗?谢谢!

【问题讨论】:

我总是使用“矫枉过正”的方法,我只是添加了一个专用模块(我称之为 Global_Var)并在那里声明了我所有的全局变量。在您的示例中Global Counter As Integer. 您在此处包含的代码部分没有明显的错误,因此问题出在您正在执行的其他部分。但是我注意到 Counter 在一个地方大写,而不是在其他地方:要么你复制不正确,要么代码显示解析器认为它们是不同的变量。 【参考方案1】:

所以,我通过简单地在我的新子之前调用函数来解决它!

Sub Test()
Call count()
Range("F1").Value = counter

end sub 

【讨论】:

【参考方案2】:

@ShaiRado 已经在 cmets 中指出了这一点。以下是一些相关的细节:

Public 类型在整个 VBA 项目中是不可见的,至少在没有对象引用的情况下是这样。因此,如果您在工作表对象\UserForm\Class 中将变量声明为Public,则需要对该变量使用完整引用。例如,如果 Counter 在 Sheet1 中声明,则使用 Sheet1.Counter

另一方面,

Global 变量可以通过 VBA 项目访问。您不需要调用它们的父对象名称以供参考。这里只有一个问题,Global 变量只能在标准模块中声明。 object\ UserForm \ Class,它们不允许在其中声明全局变量。

如果需要项目范围的访问权限,请始终声明 Global

另一件事是 Option Explicit,如果您在代码中包含它,而不是意外的输出/行为,您将收到错误 Variable not defined 并在

Range("F1").Value = 计数器

这将使调试变得更加容易。 :)

【讨论】:

以上是关于VBA:为其他潜艇使用公共变量的主要内容,如果未能解决你的问题,请参考以下文章

VBA:公共变量与属性

VBA 公共变量

Excel VBA 公共变量无法识别

Excel VBA 类属性返回公共长变量,但不是公共字符串变量

如何在 VBA 中设置全局变量

声明公共变量并赋值 - VBA