Property Let counter(c As Integer)
Set miCounter = c
End Property
Объект требуется , только из-за ключевого слова Set
.Это не ссылочное присвоение, это присвоение значения.
Просмотрите его так:
Property Let counter(c As Integer)
Let miCounter = c
End Property
Просто на самом деле не вводите ключевое слово Let
(оно будет работать, хотя), устарел :)
Также обратите внимание, что неявный модификатор для Property Let/Set
аргумента процедуры всегда Byval
- это отличается от всего остального вVBA, где неявный модификатор thr равен ByRef
;рассмотрите возможность сделать модификатор ByVal
явным.
Private Sub userform_initialize()
Dim i As Integer
For i = 1 To counter 'miCounter don't work as well
Debug.Print i
Next i
End Sub
Этот цикл никогда ничего не будет повторять, потому что здесь выполняется обработчик Initialize
:
With New usr_mainInput
Я имею в виду, что он запускается, когда возвращается инструкция New usr_mainInput
, , но перед тем, как ссылка на объект передается в блок With
(обратите внимание, что это верно для любого класса,не только формы) - это задолго до назначения .counter = 3
!Основное правило: вы хотите инициализировать состояние экземпляра в этом обработчике, а не использовать его.
Рассмотрите возможность использования обработчика Activate
.Тот будет работать сразу после .Show
вызова.