如何在模块外声明

时间:2019-01-12 12:43:06

标签: vba variables module between

在我的工作表中,我有两个模块,一个模块充满了子对象,另一个模块则想用于全局声明。

例如,在模块2中,我想要:

Sub Declarations()

Public Setup As Worksheet
Public Squad As Worksheet
Public Bio As Worksheet

Set Setup = Sheets("Setup")
Set Squad = Sheets("Squad")
Set Bio = Sheets("Bio")

End Sub

然后在每个子标题中以:

call Declarations

但这不起作用。我已经读了大约20条关于该问题的主题,只是很难理解。查看其他人的代码,这与我要实现的目标完全不同,我觉得这很简单,我无法将其与自己的工作联系起来。 诸如“从subs或函数作为参数传递”的短语-这到底是什么意思?

在我简单的想法中,它就像 1.前往声明 2.读那些东西 3.使用该信息返回我的子页面

即使我在同一模块中有多个子,也无法弄清楚如何保持整数存储在不同的子中。我有例如:

'2. Prepare Vectors
'--------------------------------------------------
Set Clubs = Sheets("Database").Range("DR:DR")

For Each C In Clubs

    If IsEmpty(C) Then Exit For

    If C = Squad.Range("A1") Then

        Select Case C.Offset(0, -112).Value

            Case Is = "G"

                Gc = Gc + 1
                ReDim Preserve Goalkeepers(Gc)
                Goalkeepers(Gc) = C.Offset(0, -121)

            Case Is = "D"

                Dc = Dc + 1
                ReDim Preserve Defenders(Dc)
                Defenders(Dc) = C.Offset(0, -121)

            Case Is = "M"

                Mc = Mc + 1
                ReDim Preserve Midfielders(Mc)
                Midfielders(Mc) = C.Offset(0, -121)

            Case Is = "A"

                Ac = Ac + 1
                ReDim Preserve Attackers(Ac)
                Attackers(Ac) = C.Offset(0, -121)

        End Select

    End If

Next C
'--------------------------------------------------

其中,我给常数Gc,Dc,Mc,Ac赋值。我试着在模块的另一个子模块中使用这些常量,并将其视为“空”。我了解这一点,因为值不会存储,而是将其设置为

Public Gc as Integer

也不起作用。

很抱歉漫步。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

需要在Sub之外的模块本身中定义公共变量。

Public Setup As Worksheet
Public Squad As Worksheet
Public Bio As Worksheet

Sub Declarations()
  Set Setup = Sheets("Setup")
  Set Squad = Sheets("Squad")
  Set Bio = Sheets("Bio")
End Sub

请注意,公共变量将在后续对Subs的调用之间保留其值。在此具体示例中,一开始调用一次Declarations()可能就足够了。