Viết code đặt tên sheet, Sai chỗ nào ?

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

nk_vk

Thành viên mới
Tham gia
24/4/09
Bài viết
10
Được thích
0
Tôi là lính mới vào VBA, nhờ các bạn xem đoạn mã sau sai gì mà có lúc chạy được lúc thì không.

Sub Ten_sheet()
Dim i As Long
For i = 2 To Sheets.Count
Sheets(i).Name = Sheets(1).Range("C" & CStr(i)).Value
Next
End Sub


Xin cảm ơn mọi người.
 
Code của bạn thiếu phần kiểm tra bẫy lỗi, ví dụ:
- Kiểm tra xem Range("C" & i) có rỗng (null) hay không?
- Kiểm tra xem tên sheet có bị trùng hay không?
 
Upvote 0
Code của bạn không lỗi nhưng lỗi ở cột C của bạn. Nếu trong vùng tương ứng với số sheet cần đổi tên rơi vào tình trạng sau sẽ phát sinh lỗi
-Trống: Tên sheet không thể trống
-Trùng nhau: Không thể 2 sheet trùng tên được
 
Upvote 0
Vậy nhờ mọi người cho thêm đoạn mã sửa các tình trang lỗi trên với.

Cảm ơn nhiều !
 
Upvote 0
Một cách - thêm dòng lệnh này vào đầu đoạn code: "On Error Resume Next"
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn sửa như sau dễ kiểm soát lỗi hơn (Lưu ý bạn dùng số thứ tự sheet trong code thì khi dịch chuyển sheet1 về sau 1 sheet khác là không chạy được)

Mã:
Sub Ten_sheet()
Dim i, dg As Long
'dim cl as
dg = Sheets.Count
For Each cell In Sheets(1).Range("C2:C" & dg - 1)
If cell = "" Then
MsgBox "Danh sach ten co o trong. Sua lai"
Exit Sub
End If
If Application.WorksheetFunction.CountIf(Sheets(1).Range("C2:C" & dg - 1), cell) > 1 Then
MsgBox "Trung ten sheet roi. Sua lai"
Exit Sub
End If
Next

For i = 2 To Sheets.Count
If Sheets(i).Name <> Sheets(1).Range("C" & CStr(i)).Value Then
Sheets(i).Name = Sheets(1).Range("C" & CStr(i)).Value
End If

Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn sửa như sau dễ kiểm soát lỗi hơn (Lưu ý bạn dùng số thứ tự sheet trong code thì khi dịch chuyển sheet1 về sau 1 sheet khác là không chạy được)

Mã:
Sub Ten_sheet()
Dim i, dg As Long
'dim cl as
dg = Sheets.Count
For Each cell In Sheets(1).Range("C2:C" & dg - 1)
If cell = "" Then
MsgBox "Danh sach ten co o trong. Sua lai"
Exit Sub
End If
If Application.WorksheetFunction.CountIf(Sheets(1).Range("C2:C" & dg - 1), cell) > 1 Then
MsgBox "Trung ten sheet roi. Sua lai"
Exit Sub
End If
Next

For i = 2 To Sheets.Count
If Sheets(i).Name <> Sheets(1).Range("C" & CStr(i)).Value Then
Sheets(i).Name = Sheets(1).Range("C" & CStr(i)).Value
End If

Next
End Sub
Anh ơi!...
- Dùng SpecialCells(2)... tức lấy toàn cell có dử liệu, khỏi cần đoạn MsgBox "Danh sach ten co o trong. Sua lai"
- Nếu trùng tên cho chạy qua luôn là xong!
Dạng vầy đây (1 vòng lập là đủ)
PHP:
Sub Ten_sheet()
 Dim i As Long, j As Long, Sh As Worksheet
 On Error Resume Next
 i = 1
 With Sheets("Main").Range("C2:C100").SpecialCells(2)
   For Each Sh In ThisWorkbook.Worksheets
     If Sh.Name <> "Main" Then
       j = j + 1
       Sh.Name = .Areas(i)(j)
       If j = .Areas(i).Count Then j = 0: i = i + 1
     End If
   Next
 End With
End Sub
Ở đây ta đặt tên sheet Main là sheet chứa dử liệu... Dù đặt sheet này ở đâu code cũng chạy được (không nên dùng code theo dạng Sheets(i) gì gì đó... sẽ có lúc sai nghiêm trọng)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình thấy ndu thật lắm chiêu độc của Exc. Ngoài VB mang hơi hướng bản địa chắc phải mạnh và linh hoạt hơn. Thêm 1 kiến thức bổ ích.
 
Upvote 0
Web KT

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

Back
Top Bottom