Khi bạn đang đứng ở Sheet1, button thực hiện lệnh cũng ở sheet1, giả sử trong code ta có thao tác với các giá trị trong sheet1, thì ta sẽ viết code dài dòng hay rút ngắn
[A1].value="x"
Vẫn biết option 1 là chuẩn để tránh lỗi nhưng vẫn quen viết cách 2
hai cách viết trên khác nhau, cùng kết quả, nhưng ý nghĩa lại rất khác nhau?
có một câu hỏi vui đặt ra là, nếu sheet2 đang kích hoạt, đoạn code trên được thực thi, thì có sự khác nhau trong hai trường hợp không?
Nên viết cách 1 vì nếu Code 2 đặt trong vòng lặp qua các Sheet là Code sẽ tèo 1 cách im lặng, ko kinh nghiệm khó debug
Cách 2 sẽ có đất diễn khi tên sheet không cố định, Cái này hay xảy ra. Lúc đó phải dùng cách 2 hoặc set sh = activesheet rồi sh.range
Vấn đề nằm ở chỗ code ban đầu đặt trên sheet hay trên module. Trên sheet thì cách nào cũng được, nhưng rõ ràng ở đây mình không thấy nó "rút gọn" được gì, code trên dài quá mà :v
Thực ra thì nếu viết thì cố gắng viết fully-qualified đến scope cần xử lý. -- Nếu làm việc trong VSTO -- xlApp.Workbooks("wb name").Worksheets("ws name").Range("A1").value = "x" -- Nếu làm việc trong môi trường Excel -- Workbooks("wb name").Worksheets("ws name").Range("A1").value = "x" -- Nếu code chỉ trong môi trường 1 Workbook -- Worksheets("ws name").Range("A1").value = "x" -- Nếu chỉ làm việc trong 1 Sheet: Range("A1").value = "x" Không cần test, đây là best practice rồi.