Подтвердить что ты не робот

Можно ли объявить общедоступную переменную в vba и присвоить значение по умолчанию?

Я хочу сделать это, но он не будет компилироваться:

Public MyVariable as Integer = 123

Какой лучший способ достичь этого?

4b9b3361

Ответ 1

.NET испортил нам:) Ваше объявление недействительно для VBA.

Только константы могут быть заданы при загрузке приложения. Вы объявляете их так:

Public Const APOSTROPHE_KEYCODE = 222

Вот пример объявления из одного из моих проектов vba:

VBA Constant Image

Если вы ищете что-то, где вы объявляете общедоступную переменную, а затем хотите инициализировать ее значение, вам необходимо создать подменю Workbook_Open и выполнить там свою инициализацию. Пример:

Private Sub Workbook_Open()
  Dim iAnswer As Integer

  InitializeListSheetDataColumns_S
  HideAllMonths_S

  If sheetSetupInfo.Range("D6").Value = "Enter Facility Name" Then
    iAnswer = MsgBox("It appears you have not yet set up this workbook.  Would you like to do so now?", vbYesNo)
    If iAnswer = vbYes Then
      sheetSetupInfo.Activate
      sheetSetupInfo.Range("D6").Select
      Exit Sub
    End If
  End If

  Application.Calculation = xlCalculationAutomatic
  sheetGeneralInfo.Activate
  Load frmInfoSheet
  frmInfoSheet.Show


End Sub

Удостоверьтесь, что вы объявили sub в самом документе рабочей книги: enter image description here

Ответ 2

Просто чтобы предложить вам другой угол -

Мне нехорошо поддерживать постоянные переменные между вызовами функций. Любые переменные, которые необходимо использовать, должны храниться в Subs и Functions и передаваться как параметры. Как только код будет выполнен, вы не должны ожидать, что VBA Project будет поддерживать значения любых переменных.

Причиной этого является то, что есть просто огромное количество вещей, которые могут непреднамеренно reset VBA Project при использовании рабочей книги. Когда это произойдет, любые общедоступные переменные получат reset до 0.

Если вам нужно значение, которое будет храниться вне ваших подсайтов и функций, я настоятельно рекомендую использовать скрытый рабочий лист с именованными диапазонами для любой информации, которая должна сохраняться.

Ответ 3

Конечно, вы знаете, но если это константа, то const MyVariable as Integer = 123 иначе вам не повезло; переменной должно быть присвоено значение в другом месте.

Вы можете:

public property get myIntegerThing() as integer
myIntegerThing= 123
end property

в модуле класса, затем глобально создайте его;

public cMyStuff as new MyStuffClass

Итак, cMyStuff.myIntegerThing доступен сразу.

Ответ 4

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

В качестве альтернативы вы можете создать себе класс с соответствующими свойствами и инициализировать их в методе Initialize

Ответ 5

Как сказано выше, Чтобы объявить глобальные доступные переменные, вы можете сделать это за пределами функций, которым предшествует ключевое слово public.

И, поскольку аффектация НЕ РАЗРЕШЕНА вне процедур, вы можете, например, создать подзаголовок InitGlobals, который инициализирует ваши общедоступные переменные, тогда вы просто вызываете эту подпрограмму в начале ваших утверждений.

Вот пример:

Public Coordinates(3) as Double
Public Heat as double
Public Weight as double

Sub InitGlobals()
    Coordinates(1)=10.5
    Coordinates(2)=22.54
    Coordinates(3)=-100.5
    Heat=25.5
    Weight=70
End Sub

Sub MyWorkSGoesHere()
    Call InitGlobals
    'Now you can do your work using your global variables initialized as you wanted them to be.
End Sub

Ответ 6

Это то, что я делаю, когда мне нужно инициализировать глобальные константы:
1. Добавьте модуль под названием Globals
2. Добавьте такие свойства в модуль Globals:

Property Get PSIStartRow() As Integer  
    PSIStartRow = Sheets("FOB Prices").Range("F1").Value  
End Property  
Property Get PSIStartCell() As String  
    PSIStartCell = "B" & PSIStartRow  
End Property

Ответ 7

Это было какое-то время, но я считаю, что это будет:

Public MyVariable as Integer
MyVariable = 123

Ответ 8

Это было довольно долгое время, но это может вас удовлетворить:

Public MyVariable as Integer: MyVariable = 123

Это немного уродливо, так как вам нужно перепечатать имя переменной, но это на одной строке.