Xin các anh giúp đỡ về code chọn sheets đầu tiên không tính sheets ẩn. (5 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

k2d_nh0k

Thành viên mới
Tham gia
12/10/15
Bài viết
17
Được thích
3
Chào các anh chị !
Nhờ anh chị giúp em về code vba.
Nội dung: em muốn chọn sheets đầu tiên nhưng không tính sheets bị ẩn.
ví dụ:
sheets(1) tên là A
sheets(2) tên là B
khi sheets(1) ẩn thì sheets đầu tiên là sheets(2) chứ không phải sheets(1).

http://upfile.vn/6CXC7aBmNrIQ/chon-sheet-xlsb.html
 
Chào các anh chị !
Nhờ anh chị giúp em về code vba.
Nội dung: em muốn chọn sheets đầu tiên nhưng không tính sheets bị ẩn.
ví dụ:
sheets(1) tên là A
sheets(2) tên là B
khi sheets(1) ẩn thì sheets đầu tiên là sheets(2) chứ không phải sheets(1).

http://upfile.vn/6CXC7aBmNrIQ/chon-sheet-xlsb.html
Bạn cứ đường đường chính chính chọn sheets(1) là được: Sheets(1).Activate

Thử xem!
 
For i = 1 To Sheets.Count
If Sheets(i).Visible Then
Sheets(i).Activate
Exit For
End If
Next i
 
Tôi thấy như thế này là được, sao phải chạy vòng lặp bác Vet nhỉ:
Sub GoToFirstSheet()
Sheets(1).Activate
End Sub
 
Tôi thấy như thế này là được, sao phải chạy vòng lặp bác Vet nhỉ:
Sub GoToFirstSheet()
Sheets(1).Activate
Bạn cứ đường đường chính chính chọn sheets(1) là được: Sheets(1).Activate

Thử xem!
For i = 1 To Sheets.Count
If Sheets(i).Visible Then
Sheets(i).Activate
Exit For
End If
Next i

End Sub
sheets(1).activate vẩn là đang lấy dữ liệu từ sheets(1) bị ẩn.
ý mình muốn là khi sheets(1) bị ẩn thì sheets đầu tiên sẻ là sheets(1). vì mình chỉ sử dụng sheets đầu tiên của file excel mỡ lên.
 
sheets(1).activate vẩn là đang lấy dữ liệu từ sheets(1) bị ẩn.
ý mình muốn là khi sheets(1) bị ẩn thì sheets đầu tiên sẻ là sheets(1). vì mình chỉ sử dụng sheets đầu tiên của file excel mỡ lên.
Thì câu lệnh đó chọn sheet đầu tiên không ẩn mà. Sheet1 ẩn thì nó sẽ active sheet2 (hay sheet bất kỳ nào đó đứng đầu dãy)
 
Thì câu lệnh đó chọn sheet đầu tiên không ẩn mà. Sheet1 ẩn thì nó sẽ active sheet2 (hay sheet bất kỳ nào đó đứng đầu dãy)
xin lổi. ý bạn nói vòng lặp For của bạn Vet hả !
nếu sử dụng vòng lặp For thì ok :D
For i = 1 To Sheets.Count
If Sheets(i).Visible Then
Sheets(i).Activate
Exit For
End If
Next i
cảm ơn bạn Vet nhé.
 
xin lổi. ý bạn nói vòng lặp For của bạn Vet hả !
nếu sử dụng vòng lặp For thì ok :D
Chài, mình thấy bạn đọc trên xuống không hiểu ý. Sao không chạy thử code bác Maika xem nó thế nào?
Nhưng cũng phải nói lại. Code bác Maika đưa không đảm bảo an toàn đâu. Cho nên mình khuyên không nên sử dụng, nó sẽ sai trong một số trường hợp :p
 
xin lổi. ý bạn nói vòng lặp For của bạn Vet hả !
nếu sử dụng vòng lặp For thì ok :D
Qua bài này tôi nhận thấy thế này:
- Khi dùng Sheets(1).Select -> nếu Sheets(1) đó bị ẩn thì VBA báo lỗi 1004, không áp dụng được phương thức đối với đối tượng đã chỉ định.
- Khi dùng Sheets(1).Activate -> VBA sẽ chọn sheet không bị ẩn bất kỳ đầu tiên bên trái và kích hoạt nó, không có lỗi nào xảy ra.
 
Khi dùng Sheets(1).Activate -> VBA sẽ chọn sheet bất kỳ đầu tiên bên trái và kích hoạt nó, không có lỗi nào xảy ra.
Không chính xác, nó sẽ chọn sheet liền kề bên phải của sheet1 nếu sheet1 bị ẩn đi. 2 cái này khác nhau. Vì giả sử sheet1 bị kéo ra ở giữa, ví dụ sheet2,sheet3,sheet1,sheet4,sheet5. Khi sheet1 ẩn đi nó thì lệnh sheet1.activate sẽ chọn sheet4 chứ không phải sheet2
 
Không chính xác, nó sẽ chọn sheet liền kề bên phải của sheet1 nếu sheet1 bị ẩn đi. 2 cái này khác nhau. Vì giả sử sheet1 bị kéo ra ở giữa, ví dụ sheet2,sheet3,sheet1,sheet4,sheet5. Khi sheet1 ẩn đi nó thì lệnh sheet1.activate sẽ chọn sheet4 chứ không phải sheet2
Tôi thử rồi bạn: trên máy tôi (Excel 2013) tôi bố trí sheet2,sheet3,sheet1,sheet9,sheet7. Nó vẫn chọn đúng sheet2 đầu dãy đấy (Lưu ý là sheets(1).Activate, chứ không phải sheet1.Activate đâu bạn nhé)
 
Tôi thử rồi bạn: trên máy tôi (Excel 2013) tôi bố trí sheet2,sheet3,sheet1,sheet9,sheet7. Nó vẫn chọn đúng sheet2 đầu dãy đấy (Lưu ý là sheets(1).Activate, chứ không phải sheet1.Activate đâu bạn nhé)
Không sai nhưng khó hiểu bỏ bố.
Nhìn cái code Sheets(1), người ta tưởng là sheet đầu tiên bên trái. Nhưng đến lúc chụp vào nó thì té ra nó là sheet đầu tiên "thấy được" từ bên trái.
 
Tôi thử rồi bạn: trên máy tôi (Excel 2013) tôi bố trí sheet2,sheet3,sheet1,sheet9,sheet7. Nó vẫn chọn đúng sheet2 đầu dãy đấy (Lưu ý là sheets(1).Activate, chứ không phải sheet1.Activate đâu bạn nhé)
Bác thử trên file này có tương tự không (office2010)
 

File đính kèm

Cái .Activate thì nó đã khác biệt cái .Visible nên đã chọn theo thứ tự thì kg cần bước lặp để kiểm tra.
VetMiniMaika8008 bàn luận cũng giúp mình hiểu thêm.
 
Mình sử dụng .Activate thì sheets(1) ẩn không bị báo lỗi, nhưng khi dùng lệnh copy dữ liệu từ sheets(1) thì nó lại copy dữ liệu từ sheets ẩn chứ không phải sheets liền kề đầu tiên.
 
Mình sử dụng .Activate thì sheets(1) ẩn không bị báo lỗi, nhưng khi dùng lệnh copy dữ liệu từ sheets(1) thì nó lại copy dữ liệu từ sheets ẩn chứ không phải sheets liền kề đầu tiên.
Khi đó bạn phải lấy tên sheet đầu tiên không ẩn đó để đưa vào tham số sheets() chứ không được lấy chỉ số index nữa. Ví dụ copy vùng A1:E12 của sheet đầu đang được chọn bởi lệnh Sheets(1).Activate thì bạn phải viết như sau: Sheets(ActiveSheet.Name).Range("A1:E12").Copy
 
Web KT

Bài viết mới nhất

Back
Top Bottom