Если я вернусь во второй раз, кнопка выбора из предыдущего прогона все еще будет выбрана.
Вы показываете формыэкземпляр по умолчанию .
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 , статью, которую я написал в прошлом году, в которой подробно объясняется, что не так с подходом экземпляр по умолчанию .