如何在 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 中公开变量?的主要内容,如果未能解决你的问题,请参考以下文章