Как объявить вне модуля - PullRequest
0 голосов
/ 12 января 2019

В моей рабочей таблице у меня есть два модуля, один из которых полон подпрограмм, а другой я хотел бы использовать для глобальных объявлений.

Например, в модуле 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 веток по этому вопросу и просто пытаюсь понять. Глядя на код других людей, он полностью отличается от того, чего я пытаюсь достичь, что я считаю довольно простым, и я не могу связать его с моей собственной работой. Фразы типа «переход от подпрограмм или функций в качестве параметров» - что это значит в точности?

На мой взгляд, это так же просто, как 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 голосов
/ 12 января 2019

Публичные переменные должны быть определены вне вашего 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

Обратите внимание, что публичные переменные сохранят свое значение между последующими вызовами ваших подпрограмм. В этом конкретном примере может быть достаточно вызвать декларации () один раз в начале.

...