Tôi có vấn đề này mong các anh em GPE xem và giúp. Ví dụ tôi 1 sheet A, sau khi Add sheet, tôi muốn đặt tên cho sheet mới là A1 và tiếp tục là A2, A3... thì code được viết như thế nào. Xin cám ơn trước (Không biết hỏi như thế có đúng không?)
Em hỏi lại: Trong Workbook của anh có nhiều sheet hay chỉ có duy nhất 1 sheet tên là A?Tôi có vấn đề này mong các anh em GPE xem và giúp. Ví dụ tôi 1 sheet A, sau khi Add sheet, tôi muốn đặt tên cho sheet mới là A1 và tiếp tục là A2, A3... thì code được viết như thế nào. Xin cám ơn trước (Không biết hỏi như thế có đúng không?)
---Em hỏi lại: Trong Workbook của anh có nhiều sheet hay chỉ có duy nhất 1 sheet tên là A?
Anh thử code này:---
Cám ơn chú, trong Workbook có nhiều sheet.
Sub InsertSheet()
Dim Sh As Worksheet, i As Long
Const ShName = "A"
On Error Resume Next
Set Sh = Sheets(ShName)
If Not Sh Is Nothing Then
Do
i = i + 1
Loop Until Sheets(ShName & i) Is Nothing
Sheets.Add(After:=Sheets(Sheets.Count)).Name = ShName & i
End If
End Sub
---Anh thử code này:
Code này sẽ hoạt động trong trường hợp có tìm thấy sheet tên là APHP:Sub InsertSheet() Dim Sh As Worksheet, i As Long Const ShName = "A" On Error Resume Next Set Sh = Sheets(ShName) If Not Sh Is Nothing Then Do i = i + 1 Loop Until Sheets(ShName & i) Is Nothing Sheets.Add(After:=Sheets(Sheets.Count)).Name = ShName & i End If End Sub
Vậy anh muốn đánh STT theo 1 tên sheet nào đó, chỉ việc sửa đoạn Const ShName = "A" thành cái gì khác tùy ý
Chuyển code của anh thành Function---
Anh viết lung tung như thế này, nhờ chú xem, code chỉ đúng được 1 lần, lần thứ 2 thì lỗi.
(Anh sẽ test code của chú, khó nuốt ). File đính kèm.
Private Function InsertSheet(ShName As String) As Worksheet
Dim Sh As Worksheet, i As Long, Tmp As Worksheet
On Error Resume Next
Set Sh = Sheets(ShName)
If Not Sh Is Nothing Then
Do
i = i + 1
Loop Until Sheets(ShName & i) Is Nothing
Set Tmp = Sheets.Add(After:=Sheets(Sheets.Count))
Tmp.Name = ShName & i
Set InsertSheet = Tmp
End If
End Function
Sub AAA_UngLuong()
On Error GoTo ExitSub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With InsertSheet("UngLuong-CnV")
Sheets("UngLuong-CnV").Cells.Copy .[A1]
.DrawingObjects.Delete
.Tab.ColorIndex = 8
.Range("A7:G1000").Value = Sheets("UngLuong-CnV").Range("A7:G1000").Value
.Range(.[A10], .[A500]).Resize(, 7).Borders.LineStyle = 0
.Range(.[A10], .[A500].End(xlUp)).Resize(, 7).Borders.LineStyle = 1
.Range(.[A10], .[A500].End(xlUp)).Resize(, 7).Borders(xlInsideHorizontal).Weight = 1
.Range("C1").Value = "Baïn haõy xöû duïng sheet naøy ñeå chænh trang in vaø Löu döõ lieäu - 05.04.2011"
End With
Sheets("UngLuong-CnV").Activate
Application.DisplayAlerts = True
Application.ScreenUpdating = True
ExitSub:
End Sub
Sub AAA_UngLuong()
On Error Resume Next
Const ShName = "UngLuong-CnV"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets(ShName).Copy After:=Sheets(Sheets.Count)
With ActiveSheet
Do
i = i + 1
Loop Until Sheets(ShName & i) Is Nothing
.Name = ShName & i
.DrawingObjects.Delete
.Tab.ColorIndex = 8
With .Range(.[A10], .[A500].End(xlUp)).Resize(, 7)
.Borders.LineStyle = 0
.Borders.LineStyle = 1
.Borders(xlInsideHorizontal).Weight = 1
End With
.Range("C1").Value = "Baïn haõy xöû duïng sheet naøy ñeå chænh trang in vaø Löu döõ lieäu - 05.04.2011"
End With
Sheets(ShName).Activate
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
---Em rút gọn lại code tí, không copy cells mà dùng copy sheet và bỏ luôn Function
PHP:Sub AAA_UngLuong() On Error Resume Next Const ShName = "UngLuong-CnV" Application.ScreenUpdating = False Application.DisplayAlerts = False Sheets(ShName).Copy After:=Sheets(Sheets.Count) With ActiveSheet Do i = i + 1 Loop Until Sheets(ShName & i) Is Nothing .Name = ShName & i .DrawingObjects.Delete .Tab.ColorIndex = 8 With .Range(.[A10], .[A500].End(xlUp)).Resize(, 7) .Borders.LineStyle = 0 .Borders.LineStyle = 1 .Borders(xlInsideHorizontal).Weight = 1 End With .Range("C1").Value = "Baïn haõy xöû duïng sheet naøy ñeå chænh trang in vaø Löu döõ lieäu - 05.04.2011" End With Sheets(ShName).Activate Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
With ActiveSheet
Do
i = i + 1
Loop Until Sheets(ShName & i) Is Nothing
End With
End Sub
Anh thêm dòng này vào sau vòng lặp Do... Loop kết quả sẽ đẹp hơn một tí---
Hết sức trân trọng sự nhiệt tình của chú, chú để anh có thời gian tiêu hóa . Chú có thể giải thích rỏ chổ này nhé
PHP:With ActiveSheet Do i = i + 1 Loop Until Sheets(ShName & i) Is Nothing End With End Sub
.Move After:=Sheets(ShName & IIf(i = 1, "", (i - 1)))
Tức là dùng vòng lập Do...Loop để xét từng thằng UngLuong-CnV1, UngLuong-CnV2, UngLuong-CnV3.... xem các sheet này có tồn tại không---
Hết sức trân trọng sự nhiệt tình của chú, chú để anh có thời gian tiêu hóa . Chú có thể giải thích rỏ chổ này nhé
PHP:With ActiveSheet Do i = i + 1 Loop Until Sheets(ShName & i) Is Nothing End With End Sub
---Em rút gọn lại code tí, không copy cells mà dùng copy sheet và bỏ luôn Function
Nếu vậy thì lại phải dùng thêm đoạn code để xóa code trong sheet mới copy thôi anh à---
Việc này lỗi do anh diển đạt không hết ý, vì trong sheet có code nên khi copy sheet thì mang theo cả code trong sheet, anh viết xử dụng trong file đính kèm copy cells là thế. Không biết chú có thể làm như thế nào mà copy sheet và bỏ luôn Function mà không mang theo code trong sheet không?
Sub AAA_UngLuong()
Dim CurSh As Worksheet
On Error Resume Next
Const ShName = "UngLuong-CnV"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets(ShName).Copy After:=Sheets(Sheets.Count)
Set CurSh = ActiveSheet
With CurSh
Do
i = i + 1
Loop Until Sheets(ShName & i) Is Nothing
.Name = ShName & i
.DrawingObjects.Delete
.Tab.ColorIndex = 8
With .Range(.[A10], .[A500].End(xlUp)).Resize(, 7)
.Borders.LineStyle = 0
.Borders.LineStyle = 1
.Borders(xlInsideHorizontal).Weight = 1
End With
.Range("C1").Value = "Baïn haõy xöû duïng sheet naøy ñeå chænh trang in vaø Löu döõ lieäu - 05.04.2011"
End With
With ThisWorkbook.VBProject.VBComponents(CurSh.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
End With
Sheets(ShName).Activate
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
---Nhưng em mong mấy anh có cách nào chỉ giúp em mà không đụng đến cái vụ code được ko ah?
cám ơn các anh thật nhiều.
Code nằm trong module, không nằm trong sheet- tên AAA: là tên sub.Với lại em làm theo anh ndu hướng dẫn - copy code vào bảng code trong sheet, sau đó đổi tên A thành TV_001 rùi sau đó chẳng biết làm gì nữa