我想在一个模块的VBA中定义一个全局变量,并在其他VBA模块中使用它。
我正在尝试关注:How do I declare a global variable in VBA?
我创建了一个名为“ GlobalVariables”的新模块,然后首先声明了Public变量,然后在函数中设置了它们的值(尝试在开放代码中执行此操作会导致错误)。我的代码如下。
但是Global
变量StartYear在其他VBA模块中似乎不可用。我在做什么错了?
Option Explicit
Public StartYear As Integer
Public BaseYear As Integer
Function DeclareGlobalVariables()
StartYear = ActiveWorkbook.Worksheets("RunModel").Range("StartYear").Value
BaseYear = ActiveWorkbook.Worksheets("RunModel").Range("BaseYear").Value
End Function
答案 0 :(得分:1)
确保将golobal变量放在模块中而不是在工作表范围中,以使其在其他模块中可访问。
您的Function
应该是Sub
,因为它不会返回任何内容。
如果您的单元格例如,您的代码将错误。包含文本(字符串)。永远不要相信用户的输入。 始终验证!
所以我建议以下内容
模块1
Option Explicit
Public StartYear As Long
Public BaseYear As Long
Public Sub DeclareGlobalVariables()
With ActiveWorkbook.Worksheets("RunModel").Range("StartYear")
If IsYear(.Value) Then
StartYear = CLng(.Value)
Else
MsgBox "StartYear needs to be a number"
End If
End With
With ActiveWorkbook.Worksheets("RunModel").Range("BaseYear")
If IsYear(.Value) Then
BaseYear = CLng(.Value)
Else
MsgBox "BaseYear needs to be a number"
End If
End With
End Sub
'validate if the input value is a valid year
Private Function IsYear(ByVal InputValue As Variant) As Boolean
If IsNumeric(InputValue) Then
If CLng(InputValue) = InputValue And _
InputValue > 0 And InputValue < 9999 Then 'integer not decimal AND 4 digit year
IsYear = True
End If
End If
End Function
您可以在任何其他模块中访问变量,例如:
模块2
Option Explicit
Public Sub TestOutput()
Debug.Print StartYear
Debug.Print BaseYear
End Sub