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:为其他潜艇使用公共变量的主要内容,如果未能解决你的问题,请参考以下文章