La risposta corretta a questa domanda è "non selezionare". A volte devi selezionare o attivare, ma il 99% delle volte non lo fai. Se il codice è simile
Select something
Do something to the selection
Select something else
Do something to the selection
Probabilmente bisogno di refactoring e considerare non la selezione.
Errore, metodo "Intervallo" dell'oggetto "_Worksheet" non riuscito, errore 1004, che si sta ottenendo è perché il foglio con il pulsante su di esso non ha un intervallo denominato "Risultato". La maggior parte (forse tutte) delle proprietà che restituiscono un oggetto hanno un oggetto padre predefinito. In questo caso, stai utilizzando la proprietà Range per restituire un oggetto Range. Poiché non si qualifica la proprietà Range, Excel utilizza il valore predefinito.
L'oggetto padre predefinito può essere diverso in base alle circostanze. Se il codice fosse in un modulo standard, l'ActiveSheet sarebbe il padre predefinito e Excel tenterebbe di risolvere ActiveSheet.Range ("Risultato"). Il codice è nel modulo di classe di un foglio (il foglio con il pulsante su di esso). Quando viene utilizzato il riferimento non qualificato, il padre predefinito è il foglio collegato a quel modulo. In questo caso sono uguali perché il foglio deve essere attivo per fare clic sul pulsante, ma non è sempre così.
Quando Excel restituisce l'errore che include testo come '_Object' (il tuo detto '_Worksheet') si riferisce sempre all'oggetto Parent predefinito, il carattere di sottolineatura lo assegna. Generalmente il modo per risolvere questo è qualificare il riferimento essendo espliciti sul genitore. Ma nel caso di selezionare e attivare quando non è necessario, è meglio rifattorizzare il codice.
Ecco un modo per scrivere il codice senza alcuna selezione o attivazione.
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
Quando sono in un modulo di classe, come modulo di classe della scheda che si sta lavorando in, cerco sempre di fare le cose in termini di quella classe. Quindi uso Me.Parent invece di ActiveWorkbook. Rende il codice più portabile e previene problemi imprevisti quando le cose cambiano.
Sono sicuro che il codice che hai ora viene eseguito in millisecondi, quindi non ti interessa, ma evitando di selezionare sicuramente accelera il tuo codice e non devi impostare ScreenUpdating. Questo potrebbe diventare importante man mano che il tuo codice cresce o in una situazione diversa.
E 'meglio lasciare un commento ad una risposta di modificare in silenzio la questione; in quest'ultimo caso, l'autore della risposta non riceverà alcuna notifica sul tuo follow-up. – GSerg
Ho aggiornato la mia risposta. – GSerg