Правильный ответ на этот конкретный вопрос - «не выбирать».Иногда вам приходится выбирать или активировать, но в 99% случаев вы этого не делаете.Если ваш код выглядит как
Select something
Do something to the selection
Select something else
Do something to the selection
Вероятно, вам необходимо выполнить рефакторинг и подумать о том, чтобы не выбирать.
Ошибка метода «Диапазон» объекта «_Worksheet», ошибка 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.Это может стать важным по мере роста вашего кода или в другой ситуации.