Макрос Excel и кнопки управления - PullRequest
0 голосов
/ 22 октября 2018

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

1 Ответ

0 голосов
/ 24 октября 2018

Если я вернусь во второй раз, кнопка выбора из предыдущего прогона все еще будет выбрана.

Вы показываете формыэкземпляр по умолчанию .

UserForm1.Show

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

Если вы хотите "начать чистку«каждый раз, когда вы показываете эту форму, у вас есть два варианта - один будет Unload временный объект, когда вы закончите с ним:

UserForm1.Show
'do stuff
Unload UserForm1

Другой (намного чище ИМО) будет остановитьиспользуя этот объект глобальной области действия, и вместо этого создайте объект с локальной областью действия, с гораздо более четким сроком службы:

With New UserForm1 ' object created here
    .Show
    'do stuff
End With ' object dies here

или:

Dim frm As UserForm1
Set frm = New UserForm1 ' object created here
frm.Show
'do stuff
'frm object goes out of scope and is destroyed at the end of the procedure

Будет ли это нарушать ваш другой код, зависит отсколько из этого другого кода написано против экземпляра формы по умолчанию.Вы используете Me в предоставленном вами примере кода, и это хороший знак: это означает, что вы написали код против независимо от текущего экземпляра , а не, например, For Each c In UserForm1.Controls, который будет повторять элементы управления в экземпляре default формы - который может находиться в другом состоянии, чем элементы управления в current instance.

Для получения дополнительной информации оработа с формами, см. UserForm1.Show , статью, которую я написал в прошлом году, в которой подробно объясняется, что не так с подходом экземпляр по умолчанию .

...