VBA:使用公共variables为其他潜艇

Excel的VBA。 我想创build一个variables,稍后我将使用其他一些子variables。 在关于这个的其他问题之后,

Public Counter As Integer 

然后,我继续给这个variables赋值

 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 

如果我尝试在相同的数值上进行testing,例如

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

我得到正确的号码。

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

 Sub Test() Range("F1").Value = counter end sub 

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

有任何想法吗? 谢谢!

@ShaiRado已经在评论中指出了它。 以下是一些细节:

Publictypes通过VBA项目没有可见性,至less不是没有他们的对象引用。 因此,如果在工作表对象\ UserForm \ Class中声明一个variables为Public ,则需要使用该variables的完整引用。 例如,如果Counter是在Sheet1中声明,然后使用Sheet1.Counter

另一方面, Globalvariables可以通过VBA项目访问。 您不需要为引用调用其父对象名称。 这里只有一点, Globalvariables只能在标准模块中声明。 object \ UserForm \ Class,它们不允许在其中声明全局variables。

如果需要项目范围访问,则始终声明Global

另一件事是Option Explicit ,如果你在你的代码中,而不是意想不到的输出/行为,你会得到错误Variable not defined与高达

范围(“F1”)。值=计数器

这将使debugging更容易。 🙂

所以,我解决了这个问题,只需在我的新分区之前调用该函数!

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