Activate và Select

Euler

Administrator
Thành viên BQT
Select sheet:
Bạn cần đăng nhập để thấy hình ảnh


Chúng ta chọn sheet nào đó chúng ta có câu lệnh:
Mã:
Sheets(1).Select     ' Chọn sheet đầu tiên
Worksheets(1).Select ' Chọn sheet đầu tiên
Hai câu lệnh trên đều có ý nghĩa tương đương, nhưng ở mức độ tinh tế nó có một chút khác biệt.
Sheets: Lấy tất cả những thứ thuộc về sheet.
Worksheets: Chúng ta chỉ lấy worksheets( Chúng ta không lấy những thứ như Graph trong sheet).
Mình chưa có thời gian tìm hiểu kỹ hơn, trong code thực tế thì mình thường dùng câu lệnh đầu tiên.
Ở code trên chúng ta truyền tham số 1 (hoặc 2,3,...) để gọi sheet.

Chúng ta cũng có thể dùng tên sheet để gọi.
Mã:
Sheets("Sheet1").Select     ' Chọn sheet đầu tiên
Worksheets("Sheet1").Select ' Chọn sheet đầu tiên
Khi dùng tên sheet chúng ta phải cho vào trong dấu "" .

Activate sheet:
Mã:
Sheets(1).Activate            ' Active sheet 1
Worksheets("Sheet1").Activate ' Active sheet 1
Trạng thái Active là trạng thái sẵn sàng chờ nhập dữ liệu. Khác với select là tại một thời điểm chúng ta chỉ có thể nhập dữ liệu vào một sheet, có nghĩa là chỉ Active một sheet.
Trong khi đó chúng ta có thể select nhiều sheet vào cùng một thời điểm.
Bạn cần đăng nhập để thấy hình ảnh


Mã:
Sheets(Array(1, 2)).Select               ' select sheet 1 và sheet 2
Sheets(Array("Sheet1", "Sheet2")).Select ' select sheet có tên là "sheet1", "sheet2"

Worksheets(Array(1, 2)).Select               '  select sheet 1 và sheet 2
Worksheets(Array("Sheet1", "Sheet2")).Select ' select sheet có tên là "sheet1", "sheet2"
Để chọn hết các sheet các bạn dùng một trong hai lệnh sau:
Mã:
Sheets.Select
'Hoặc
Worksheets.Select
Tại sao cần quan tâm tới lệnh Active?
Khi chúng ta làm việc với các thao tác copy và paste, chúng ta nên Active workbook và sheet đó lên để tránh bị lỗi.
Khi làm việc với nhiều workbook, cần tìm dòng dữ liệu cuối cùng cũng vậy, nên Active workbook và sheet đó lên.
Chương trình sẽ chạy chậm hơn một chút, nhưng đảm bảo tính chính xác.
Mã:
Workbooks("file1").Sheets("ten sheet").Activate
'sau đó là lệnh copy hoặc paste, hoặc tìm dòng dữ liệu cuối cùng.
Nguồn:
 

vbano1

SMod
Thành viên BQT
Liên quan tới hoạt động này, giới thiệu đoạn code copy sheet and rename:
Mã:
Sheets("Sheet1").Copy after:=Sheets("Sheet3")
ActiveSheet.Name = "Test"
Và tất nhiên để làm việc này, trước đó chúng ta cũng phải active workbook đó lên.
 
B

buiquangthuan

Guest
Cho em hỏi 1 chút ạ. khi đang ở sheet 2. sử dụng Sheets("Sheet1").Active thì không báo lỗi. Nhưng nếu đứng ở sheet 1. mà cùng đoạn code trên, nó báo lỗi ngay. Các anh chị chỉ giùm em chỗ khác biệt với ạ
 

Euler

Administrator
Thành viên BQT
Cho em hỏi 1 chút ạ. khi đang ở sheet 2. sử dụng Sheets("Sheet1").Active thì không báo lỗi. Nhưng nếu đứng ở sheet 1. mà cùng đoạn code trên, nó báo lỗi ngay. Các anh chị chỉ giùm em chỗ khác biệt với ạ
Tôi lý giải câu hỏi của bạn như sau, nếu sai thì bạn bổ sung giúp tôi có được không?
Nội dung câu hỏi:
Đang đứng ở sheet1 và thực thi lệnh Active sheet 1 thì bị lỗi. Nguyên nhân là gì?
Trả lời:
1. Tôi đứng ở sheet 1 và thực thi active sheet1 nhưng không thấy báo lỗi. Nếu có thể bạn hãy tái hiện lỗi của bạn bằng phần mềm camtasia quay lại thao tác màn hình, xuất video lên youtube và cho chúng mình xem được không ạ? Hoặc xuất ra ảnh gif cũng được.
Bạn cần đăng nhập để thấy hình ảnh

2. Mục đích hành động của bạn là gì? Tại sao đang đứng ở sheet 1, mà lại còn muốn Active sheet1. Đó chẳng phải là việc dư thừa hay sao?
P/S: Phần mềm camtasia, bạn có thể xem ở đây:
 
B

buiquangthuan

Guest
2. Mục đích hành động của bạn là gì? Tại sao đang đứng ở sheet 1, mà lại còn muốn Active sheet1. Đó chẳng phải là việc dư thừa hay sao?
Dạ cám ơn anh đã tham vấn ạ. Chẳng là em đang để đoạn code đó ở dạng workbook_open. Khi mở lên là nó sẽ cập nhật giá trị nào đó. tại sheet1. Nhưng lúc bật lên. mà đang ở sheet2 thì nó lại không tự động cập nhật. Dù sao em cũng đã tìm được cách khác rồi bằng cách. em sẽ duyệt qua toàn bộ các sheet. gặp phải sheet nào em muốn cập nhật thì sẽ thực hiện điều đó ạ
 

Euler

Administrator
Thành viên BQT
Dạ cám ơn anh đã tham vấn ạ. Chẳng là em đang để đoạn code đó ở dạng workbook_open. Khi mở lên là nó sẽ cập nhật giá trị nào đó. tại sheet1. Nhưng lúc bật lên. mà đang ở sheet2 thì nó lại không tự động cập nhật. Dù sao em cũng đã tìm được cách khác rồi bằng cách. em sẽ duyệt qua toàn bộ các sheet. gặp phải sheet nào em muốn cập nhật thì sẽ thực hiện điều đó ạ
Vậy là tốt rồi. Cảm ơn bạn đã liên lạc thông báo lại tình hình.
Mong bạn chú ý để các bài viết sau dễ hiểu hơn. Làm sao để bất cứ ai cũng hiểu được.
Bạn tham khảo thêm bài viết này về cách post bài nhé:
 
Top