Правильный ответ на этот вопрос - «не выбирать». Иногда вам нужно выбрать или активировать, но в 99% случаев вы этого не сделаете. Если ваш код выглядит так:
Select something
Do something to the selection
Select something else
Do something to the selection
Возможно, вам придется реорганизовать и не выбирать.
Ошибка, метод «Диапазон» объекта «_Решет» не выполнен, ошибка 1004, которую вы получаете, состоит в том, что лист с кнопкой на нем не имеет диапазона с именем «Результат». Большинство (возможно, все) свойств, возвращающих объект, имеют родительский объект по умолчанию. В этом случае вы используете свойство Range для возврата объекта Range. Поскольку вы не квалифицируете свойство Range, Excel использует значение по умолчанию.
Родительский объект по умолчанию может отличаться в зависимости от обстоятельств. Если ваш код был в стандартном модуле, то ActiveSheet будет родителем по умолчанию, и Excel попытается разрешить ActiveSheet.Range («Результат»). Ваш код находится в модуле класса листа (лист с кнопкой на нем). Когда используется неквалифицированная ссылка, родитель по умолчанию - это лист, прикрепленный к этому модулю. В этом случае они одинаковы, потому что лист должен быть активным, чтобы нажимать кнопку, но это не всегда так.
Когда Excel дает ошибку, которая включает в себя текст, такой как «_Object» (ваш «_Worksheet»), он всегда ссылается на родительский объект по умолчанию - это подчеркивает это подчеркивание. Как правило, способ исправить это, чтобы квалифицировать ссылку, будучи явным о родительском. Но в случае выбора и активации, когда вам это не нужно, лучше просто реорганизовать код.
Вот один из способов написать свой код без какого-либо выбора или активации.
Private Sub cmdRecord_Click()
Dim shSource As Worksheet
Dim shDest As Worksheet
Dim rNext As Range
'Me refers to the sheet whose class module you're in
'Me.Parent refers to the workbook
Set shSource = Me.Parent.Worksheets("BxWsn Simulation")
Set shDest = Me.Parent.Worksheets("Reslt Record")
Set rNext = shDest.Cells(shDest.Rows.Count, 1).End(xlUp).Offset(1, 0)
shSource.Range("Result").Copy
rNext.PasteSpecial xlPasteFormulasAndNumberFormats
Application.CutCopyMode = False
End Sub
Когда я в модуле класса, как класса модуля листа, что вы работаете, я всегда стараюсь делать вещи с точки зрения этого класса. Поэтому я использую Me.Parent вместо ActiveWorkbook. Это делает код более портативным и предотвращает непредвиденные проблемы, когда что-то меняется.
Я уверен, что код, который у вас есть, работает в миллисекундах, поэтому вам может быть безразлично, но, избегая выбора, определенно ускорит ваш код, и вам не нужно будет устанавливать ScreenUpdating. Это может стать важным, поскольку ваш код растет или в другой ситуации.
Лучше оставить комментарий к ответу, чем молча отредактировать вопрос; в последнем случае автор ответа не получит никаких уведомлений о вашей последующей деятельности. – GSerg
Я обновил свой ответ. – GSerg