tuan_anhbm
Thành viên thường trực
- Tham gia
- 16/7/09
- Bài viết
- 253
- Được thích
- 1,605
Hôm trước có nhờ người quen mua được cuốn sách lập trình VBA - tác giả Phan Tự Hướng. Tôi rất thích cuốn sách này vì bao quát nhiều kiến thức bổ ích.
Tuy vậy có 1 chỗ muốn nhờ tác giả kiểm chứng lại xem sao:
Tại trang 254 - có 1 thủ tục xóa sheet rỗng:
Qua thử nghiệm tôi thấy macro trên hình như có vài vấn đề cần xem xét:
Tôi thử edit như sau, không biết đã được chưa nhưng thấy cho kết quả như mong muốn:
Nhờ anh Hướng test lại thử xem sao nhé.
Tuy vậy có 1 chỗ muốn nhờ tác giả kiểm chứng lại xem sao:
Tại trang 254 - có 1 thủ tục xóa sheet rỗng:
Mã:
[/FONT]
[COLOR=blue][FONT=Tahoma]Sub XoaSheetRong1()[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma] Application.DisplayAlerts = False[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma] For Each Cell In ActiveSheet.UsedRange ‘(1)[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma] If IsEmpty(Cell) Then ‘(2)[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma] ActiveSheet.Delete[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma] End If[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma] Next[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma] Application.DisplayAlerts = True[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma]End Sub[/FONT][/COLOR]
[FONT=Tahoma]
- Câu lệnh 1 có nghĩa: duyệt qua từng ô trong mảng chữ nhật có dữ liệu. Câu lệnh 2: Nếu cell đầu tiên là trống thì xóa sheet hiện hành -- > có thể rút gọn thành: “If IsEmpty(ActiveSheet.UsedRange) Then” (bỏ for/next). Tuy vậy vẫn chưa được vì: Nếu trong sheet có dữ liệu nhưng cell đầu tiên trống. vd: nếu ô A2 & B1 có dữ liệu (A1 trống) thì nó cũng xóa luôn sheet này.
- Nó chỉ làm việc trên sheet hiện hành, không duyệt qua các sheet khác. Vì Next ở đây là Next với cell trong UsedRange chứ không phải với Sheet.
Tôi thử edit như sau, không biết đã được chưa nhưng thấy cho kết quả như mong muốn:
Mã:
[/FONT]
[COLOR=blue][FONT=Tahoma]Sub XoaSheetRong2()[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma]On Error Resume Next[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma]Application.DisplayAlerts = False[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma]So_sheet = ActiveWorkbook.Sheets.Count[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma]Sheets(1).Select[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma]For i = 1 To So_sheet[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma] If WorksheetFunction.CountA(Cells) = 0 And ActiveWorkbook.Sheets.Count > 1 Then[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma] ActiveSheet.Delete[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma] Else: ActiveSheet.Next.Select[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma] End If[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma]Next[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma]Application.DisplayAlerts = True[/FONT][/COLOR]
[COLOR=blue][FONT=Tahoma]End Sub[/FONT][/COLOR]
[FONT=Tahoma]