VBA:将公共变量用于其他潜艇

时间:2016-08-17 09:38:11

标签: excel vba excel-vba variables public

Excel的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子,但也没有结果。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

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

Public 类型在VBA项目中没有可见性,至少没有它们的Object引用。因此,如果在工作表对象\ UserForm \ Class中声明变量为Public,则需要对该变量使用完整引用。例如,如果在Sheet1中声明Counter,则使用Sheet1.Counter

另一方面,

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

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

另一件事是 Option Explicit ,如果您在代码中使用了它,而不是意外的输出/行为,那么您可能会收到错误Variable not defined并且密码在

  

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

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

答案 1 :(得分:-1)

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

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

end sub