如何在 VBA 中公开变量?

Posted

技术标签:

【中文标题】如何在 VBA 中公开变量?【英文标题】:How to make the variable public in VBA? 【发布时间】:2019-07-27 08:10:56 【问题描述】:

我需要找到 vendornumber 值以根据给定数据构造一个矩阵。我在下面写了代码(在 VBA 中)

(它有更多行用于矩阵构造,但我在这里剪掉了它们)

Public Sub tryout()
 Dim vendornumber As Integer
 Dim rownumber As Integer
 rownumber = Worksheets("DISTANCE").Range("A2", 
 Worksheets("DISTANCE").Range("A2").End(xlDown)).Rows.Count
    Dim y As Integer
    Do Until (y = rownumber)
       y = vendornumber * (vendornumber + 1)
       vendornumber = vendornumber + 1
    Loop
End Sub

代码运行良好,但我也想在其他模块中使用此值。我试图将变量公开为:

Public vendornumber As Integer

它给出了错误:子或函数中的属性无效。

然后,我把这一行放到子外面,它给出了错误:溢出,并指出下面的代码部分作为原因:

y = vendornumber * (vendornumber + 1)

【问题讨论】:

公共行必须在子行之前(在程序的顶部)。 如果您希望 vendornumber 公开,请将 Dim vendornumber as Integer 移到子外部。 您是否尝试使用rownumber 来查找最后一行?如果是这样,将rownumber as Integer 更改为rownumber as Long 并在A 列中找到最后一行数据rownumber = worksheet("DISTANCE").Cells("DISTANCE").Rows.Count,"A2").End(xlUp).Row Integer 是 16 位有符号整数类型,最大值为 32,767。当您尝试为其分配大于或等于 32,768 的值时,将引发溢出错误。声明 y As Long(一个 32 位有符号整数类型)应该可以修复它。经验法则,你永远不需要声明任何东西As Integer 【参考方案1】:

你需要在外面声明变量。

Public vendornumber As Integer

Public Sub tryout()
   vendornumber = 1

【讨论】:

虽然如果变量是在对象模块(Sheet、类等)中声明的,则需要“通过”对象来访问它。例如,如果在“ThisWorkbook”模块中声明了一个变量(TestVar),它将通过ThisWorkbook.TestVar 访问

以上是关于如何在 VBA 中公开变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VBA 中声明一个全局变量?

如何在 VBA PowerQuery 中添加动态变量

如何在 VBA PowerQuery 中添加动态变量

如何在 VBA 循环中创建不同的变量名称

VBA:为其他潜艇使用公共变量

如何使用不同的变量在 VBA 中自动填充范围