Hướng Dẫn Khắc Phục Lỗi Debug Khi Chọn Dữ Liệu Từ Sheet Khác Trong Excel
Nhờ các anh chị và các bạn giúp đỡ tôi vấn đề này. Cụ thể như sau:
Tôi có một bảng tính với 2 sheet, hiện đang đứng ở Sheet B. Để chọn (bôi đen) từ ô B4 đến ô cuối cùng có dữ liệu trên cột B ở Sheet A, tôi sử dụng đoạn code sau:Sheets("A").Range(, .End(xlUp)).Select
Tuy nhiên, đoạn code trên bị lỗi Debug và tôi không hiểu nguyên nhân tại sao. Mong các anh chị và các bạn chỉ giáo!Trân trọng cảm ơn!
Chỉ cần thêm câu này là tương đối ổn:
Sub SelectRange()
Sheets("A").Activate
Sheets("A").Range(, .End(xlUp)).Select
End Sub
Muốn chọn 1 vùng trong 1 sheet khác thì không thể dùng lệnh Select.
Cần phải đặt tên cho vùng đó, và dùng lệnh Application.Goto
Nếu lười tạo name thì gọi thẳng luôn cũng được.
………….
Người ta không gọi activate là vì muốn tránh sự kiện worksheet_activate.
Như vậy có cần hay không tuỳ theo goto có gây sự kiện này hay không?
Chắc là vầy:
Application.Goto Reference:="A!R4C2:R" & Sheets("A")..End(xlUp).Row & "C2"
ý mình là ngoài Application.Goto …ra kia !
Bạn nên tìm hiểu Application.Goto khác với worksheets(…).Active và Select ra sao có lẽ tốt hơn.
Nếu bạn đặt một cái sub worksheet_activate và một cái worksheet_selectionchange vào sheet B sẽ thấy:
Application.GoTo gây ra sự kiện selectionchange rồi mới đến activate
Activate + Select, đương nhiên, gây ra activate rồi mới selectionchange
(sự kiện selectionchange chỉ xảy ra khi ô chọn ở sheet thay đổi)
Điều này rất quan trọng vì nếu bạn có code ở mấy sự kiện thì phải biết sự kiện nào xảy ra trước.
Điều thứ hai, kém quan trọng, nên bạn biết cũng được mà không cũng chả sao:
Application.GoTo có ghi lại một mảng PreviousSelections. Nếu cần, bạn có thể truy mảng này để biết selection trước đó. Lệnh Select không ghi lại.
Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...
Xem khóa học