Câu trả lời đúng cho câu hỏi cụ thể này là "không chọn". Đôi khi bạn phải chọn hoặc kích hoạt, nhưng 99% thời gian bạn không. Nếu mã của bạn trông giống như
Select something
Do something to the selection
Select something else
Do something to the selection
Bạn có thể cần phải tái cấu trúc và cân nhắc không chọn.
Lỗi, phương pháp 'Phạm vi' của đối tượng '_Worksheet' không thành công, lỗi 1004 mà bạn nhận được là vì trang tính có nút trên đó không có dải ô có tên là "Kết quả". Hầu hết (có thể tất cả) các thuộc tính trả về một đối tượng có một đối tượng cha mẹ mặc định. Trong trường hợp này, bạn đang sử dụng thuộc tính Range để trả về một đối tượng Range. Vì bạn không đủ điều kiện thuộc tính Phạm vi, Excel sử dụng giá trị mặc định.
Đối tượng gốc mặc định có thể khác nhau tùy theo hoàn cảnh. Nếu mã của bạn nằm trong một mô-đun chuẩn, thì ActiveSheet sẽ là mặc định của cha mẹ và Excel sẽ cố gắng giải quyết ActiveSheet.Range ("Kết quả"). Mã của bạn nằm trong mô-đun lớp của trang tính (trang tính có nút trên đó). Khi tham chiếu không đủ tiêu chuẩn được sử dụng ở đó, cha mẹ mặc định là trang tính được gắn với mô-đun đó. Trong trường hợp này, chúng giống nhau vì trang tính phải hoạt động để nhấp vào nút, nhưng điều đó không phải lúc nào cũng đúng.
Khi Excel cung cấp lỗi bao gồm văn bản như '_Object' (của bạn nói '_Worksheet'), nó luôn đề cập đến đối tượng cha mẹ mặc định - dấu gạch dưới cho biết điều đó. Nói chung cách khắc phục đó là để đủ điều kiện tham chiếu bằng cách rõ ràng về cha mẹ. Nhưng trong trường hợp chọn và kích hoạt khi bạn không cần, tốt hơn là chỉ cần cấu trúc lại mã.
Đây là một cách để viết mã của bạn mà không cần chọn hoặc kích hoạt.
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
Khi tôi ở trong mô-đun lớp học, như mô-đun lớp của tờ bạn đang làm việc, tôi luôn cố gắng làm mọi thứ theo lớp đó. Vì vậy, tôi sử dụng Me.Parent thay vì ActiveWorkbook. Nó làm cho mã dễ dàng hơn và ngăn ngừa các sự cố không mong muốn khi mọi thứ thay đổi.
Tôi chắc chắn mã bạn hiện đang chạy bằng mili giây, vì vậy bạn có thể không quan tâm, nhưng tránh việc chọn chắc chắn sẽ tăng tốc mã của bạn và bạn không phải đặt ScreenUpdating. Điều đó có thể trở nên quan trọng khi mã của bạn phát triển hoặc trong một tình huống khác.
Tốt hơn là để lại nhận xét cho câu trả lời hơn là âm thầm chỉnh sửa câu hỏi; trong trường hợp thứ hai, tác giả của câu trả lời sẽ không nhận được bất kỳ thông báo nào về việc theo dõi của bạn. – GSerg
Tôi đã cập nhật câu trả lời của mình. – GSerg