2016-08-17 116 views
1

Excel-VBA。我想创建一个变量,稍后我会在其他几个子目录中使用它。继这个其他的问题,我声明的变量公开VBA:对其他潜水艇使用公共变量

Public Counter As Integer 

然后,我继续使用子

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 

如果我尝试测试在同一子给予价值的变量,值数有例如

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

我得到正确的数字。

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

Sub Test() 

Range("F1").Value = counter 

end sub 

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

任何想法?谢谢!

+1

我总是使用“overkill”approcah,我只是添加一个专用模块(我称之为_Global_Var_),并且在那里我声明了所有的全局变量。在你的示例'Global Counter As Integer'中。 –

+1

这里包含的代码部分没有明显的错误,所以问题出在你正在做的其他部分。但我注意到Counter是在一个地方大写的,而不是在其他地方:要么复制不正确,要么代码显示解析器认为它们是不同的变量。 – david

回答

2

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

Public类型不通过有知名度了VBA项目,至少不是没有对象引用。因此,如果在工作表对象\ UserForm \ Class中声明变量Public,则需要使用该变量的完整引用。例如,如果Counter在Sheet1中声明,则使用Sheet1.Counter

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

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

的另一件事是Option Explicit,如果你在你的代码有它,而不是意外输出/行为,你woud已经得到了错误Variable not defined与codde在

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

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

-1

所以,我解决了它只需调用我的新子功能之前!

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

end sub