dùng vòng do...while....loop với sheet

  • Thread starter Thread starter giaosy
  • Ngày gửi Ngày gửi
Liên hệ QC

giaosy

Thành viên thường trực
Tham gia
6/12/06
Bài viết
205
Được thích
144
Các bác giúp em cách sử dụng vòng:
do....while.....loop
để hiển thị tên của các sheet. giả sử em có một workbook (bao gồm 20 sheet). em muốn sử dụng vòng lặp để hiện tên của các sheet từ sheet 2 đến sheet 20.

cách sử dụng tên sheet theo kiểu sheet.name và sheet1, sheet2 có gì khác nhau không các bác, em đã làm thủ như thế này nhưng không được:

Sub duyet_sheet ()
Dim i As Integer
Dim wsh As Worksheet
Application.ScreenUpdating = False
Do While i < ThisWorkbook.Worksheets.Count + 1
i = i + 1
mgsbox (wsh & i.name)
Loop
Application.ScreenUpdating = True
End Sub

cái này cũng không được

Sub tim_sh()
Dim i As Integer
Dim wsh As Worksheet
For i = 2 To ThisWorkbook.Worksheets.Count
MsgBox (wsh&""&i.Name)
Next
End Sub

nó báo lỗi ở dòng in đậm

mong các bác chỉ giúp
Rất cảm ơn các bác !
 
Lần chỉnh sửa cuối:
trời ơi! các bác ơi, em đang hỏi là cái vòng lặp này thực sự nó tác động thế nào đến từng sheet trong nhóm đối tượng (các sheet) mà nó duyệt qua cơ.
em thấy nó cứ chỉ tác động đến sheet đầu tiên còn lại thì kệ.
Các bác xem và giải thích hộ em đoạn code trên với. khi chạy đoạn code này, msgbox đều báo đúng tên sheet và dòng cần tác động trong sheet đó, nhưng chẳng thấy kết quả cần phải có ở đó.
cảm ơn các bác
Bạn cho file đính kèm lên luôn đi... Nhìn code khó hình dung vấn đề quá
 
Upvote 0
to bac ttphong: em để code trong modune và em sửa cái active đúng như bác và bác voda nói rồi, nhưng cũng không được
để em chỉnh sửa file gửi lên vậy
thank
 
Upvote 0
Mới tìm ra 1 lỗi như sau:
- Tại dòng thứ 6
PHP:
 dc = Range("B11").End(xlDown).Row
như vậy, dc = chỉ số dòng cuối cùng của bảng tính (65536 đối với Ex 2003 về trước)


- Tại dòng thứ 21:
PHP:
Cells(dc, j).Offset(1).Value = WorksheetFunction.VLookup(wsh.Name, SR, j, 0)
như vậy, Cells(dc, j).Offset(1) sẽ là ô tại cột thứ j và dòng thứ dc + 1 (= 65537 đối với Ex 2003 về trước). Ô này không tồn tại --> báo lỗi.
 
Upvote 0
ndu96081631 thân! Trong đoạn code của bạn nên thay nhw sau mình thấy hợp lý hơn:
Sub tim_sh()
Dim i As Byte
Dim wsh As Worksheet
For i = 1 To ThisWorkbook.Worksheets.Count
Set wsh = Sheets(i)
MsgBox wsh.Name
'wsh.Activate
'[A1] = 1

wsh.cells(1,1)=1
Next i
End Sub
 
Upvote 0
ndu96081631 thân! Trong đoạn code của bạn nên thay nhw sau mình thấy hợp lý hơn:
Sub tim_sh()
Dim i As Byte
Dim wsh As Worksheet
For i = 1 To ThisWorkbook.Worksheets.Count
Set wsh = Sheets(i)
MsgBox wsh.Name
'wsh.Activate
'[A1] = 1

wsh.cells(1,1)=1
Next i
End Sub
Anh ơi! Cells(1,1) với [A1] là một thứ mà
 
Upvote 0
ndu96081631 à! Ý mình nói không phải là chỗ đó mà nó bỏ đi khâu lôi cái sheet thứ i ra và mở ra thành sheet hiện hành cơ (wsh.Activate)mà gán giá trị luôn cho ô A1.
 
Upvote 0
ndu96081631 à! Ý mình nói không phải là chỗ đó mà nó bỏ đi khâu lôi cái sheet thứ i ra và mở ra thành sheet hiện hành cơ (wsh.Activate)mà gán giá trị luôn cho ô A1.
Ah, cái này em biết nhưng lý do em làm vậy là vì tác giã muốn phải Active từng sheet trước (nên phải thêm cái lòng thòng vào)...
 
Upvote 0
Mới tìm ra 1 lỗi như sau:
- Tại dòng thứ 6
PHP:
 dc = Range("B11").End(xlDown).Row
như vậy, dc = chỉ số dòng cuối cùng của bảng tính (65536 đối với Ex 2003 về trước)


- Tại dòng thứ 21:
PHP:
Cells(dc, j).Offset(1).Value = WorksheetFunction.VLookup(wsh.Name, SR, j, 0)
như vậy, Cells(dc, j).Offset(1) sẽ là ô tại cột thứ j và dòng thứ dc + 1 (= 65537 đối với Ex 2003 về trước). Ô này không tồn tại --> báo lỗi.
to bác minhlev: đoạn này không sai, bác thử dùng hàm msgbox kiểm tra giá trị của biến dc xem nó báo thế nào đi -+*/
 
Upvote 0
Web KT

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

Back
Top Bottom