【问题标题】:VBA : Using Public variables for other subsVBA:为其他潜艇使用公共变量
【发布时间】: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 在一个地方大写,而不是在其他地方:要么你复制不正确,要么代码显示解析器认为它们是不同的变量。

标签: vba excel variables public


【解决方案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 = 计数器

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

    【讨论】:

      猜你喜欢
      • 2020-10-20
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 2019-07-31
      相关资源
      最近更新 更多