Hoàng Đình Huy
Thành viên mới
- Tham gia
- 24/11/17
- Bài viết
- 26
- Được thích
- 1
- Giới tính
- Nam
Góp ý cho bạn:Em tạo được 1 file rồi nhưng chưa biết cách tạo nhiều file ạ.
Góp ý cho bạn:
1/ Đọc xong chẳng hiểu bạn muốn làm cái gì luôn.
2/ Bạn nên giải trình vấn đề càng cụ thể, rõ ràng, càng chi tiết thì càng tốt,.
3/ Bạn nêu tạo nhiều file thì chẳng ai hiểu bạn muốn làm cái gì, ở đâu? của sheet nào hay tất cả các sheet mỗi sheet là 1 File hay tách dữ liệu của 1 sheet.
Bạn gửi 1 file dữ liệu cần xuất ra như thế nào cho mọi người dễ hình dung (như là form mẫu, bao gồm tên file mới cần lưu là gì nữa)dạ em cảm ơn anh đã góp ý ạ.
Nội dung em cần là:
- Sheet Chi tiet DMS, cột ASM có 22 người khác nhau, giờ em muốn tạo 22 file, mỗi file lưu 1 người
- Mỗi file sẽ có 2 sheet, 1 là DMS (paste value), 2 là Chi tiet DMS ứng với từng người ạ
Sheet1 chưa bỏ đi những cột không cần thiết (mình đưa cả sheet NPP qua luôn)Dạ em mong muốn trả tạo ra giống file như vậy ạ (đây là file tháng 8 em làm ạ)
View attachment 244403
Trong file có ở sheet 1: toàn bộ sheet 1 là chuyển về paste value
View attachment 244404
Ở sheet 2:
View attachment 244408
Đây là link chi tiết các kết quả trả về ạ:
ASM - Google Drive
drive.google.com
Sub TachSheet()
Dim sPath As String, sWb As Workbook, dWb As Workbook, nWs As Worksheet, Dic As Object, NameArr(), I&, J&
Dim Ngay&, ThangNam As String
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.Calculation = xlCalculationManual
End With
Set sWb = ThisWorkbook
sPath = sWb.Path
Set Dic = CreateObject("Scripting.Dictionary")
With sWb
Ngay = Day(Sheets("Chi Tiet DMS").Range("K2"))
ThangNam = " T" & Month(Sheets("Chi Tiet DMS").Range("K2")) & "." & Year(Sheets("Chi Tiet DMS").Range("K2"))
If Not Sheets("Chi Tiet DMS").AutoFilterMode = False Then
.Range("Table1[[#Headers],[Tên NPP]:[ASM]]").AutoFilter
End If
Sheets("Chi Tiet DMS").ListObjects("Table1").AutoFilter.ShowAllData
NameArr = Sheets("Chi Tiet DMS").Range("Table1[ASM]").Value
End With
For I = 1 To UBound(NameArr, 1)
If Not Dic.exists(NameArr(I, 1)) Then
Dic.Add (NameArr(I, 1)), NameArr(I, 1)
End If
Next
For Each Key In Dic.keys
J = J + 1
sWb.Sheets("NPP").Copy
Set dWb = ActiveWorkbook
With dWb
Cells.Copy
Cells.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
'xoa cot gi thuc hien vao day
.Sheets("NPP").Name = "Sheet1"
Sheets.Add after:=Sheets(Sheets.Count)
With ActiveSheet
sWb.Sheets("Chi Tiet DMS").ListObjects("Table1").Range.AutoFilter Field:=11, Criteria1:=Key
sWb.Sheets("Chi Tiet DMS").Range("A1:K" & sWb.Sheets("Chi Tiet DMS").Range("K" & Rows.Count).End(3).Row).Copy
.Range("A1").PasteSpecial (xlPasteValues)
End With
End With
'K?T QU? TB MVO AUDIT_DMS 25 T8.2020 _ ASM Bùi T?n Phúc
dWb.Close True, sPath & "\KET QUA TB MVO AUDIT_DMS " & Ngay & ThangNam & "_ASM " & Key & ".xlsx"
Next
Set Dic = Nothing
MsgBox "Hoan thanh " & J & " file!"
With Application
.ScreenUpdating = True
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
End With
End Sub
dạ máy công ty ạBài của bạn làm trên Google sheets à. hay là file thường trên máy tính cá nhân thế?
Sheet1 chưa bỏ đi những cột không cần thiết (mình đưa cả sheet NPP qua luôn)
Bạn test thử nha, thiếu sót gì nhờ anh chị khác bổ sung hoặc làm mới nhé!
PHP:Sub TachSheet() Dim sPath As String, sWb As Workbook, dWb As Workbook, nWs As Worksheet, Dic As Object, NameArr(), I&, J& Dim Ngay&, ThangNam As String With Application .ScreenUpdating = False .DisplayAlerts = False .Calculation = xlCalculationManual End With Set sWb = ThisWorkbook sPath = sWb.Path Set Dic = CreateObject("Scripting.Dictionary") With sWb Ngay = Day(Sheets("Chi Tiet DMS").Range("K2")) ThangNam = " T" & Month(Sheets("Chi Tiet DMS").Range("K2")) & "." & Year(Sheets("Chi Tiet DMS").Range("K2")) If Not Sheets("Chi Tiet DMS").AutoFilterMode = False Then .Range("Table1[[#Headers],[Tên NPP]:[ASM]]").AutoFilter End If Sheets("Chi Tiet DMS").ListObjects("Table1").AutoFilter.ShowAllData NameArr = Sheets("Chi Tiet DMS").Range("Table1[ASM]").Value End With For I = 1 To UBound(NameArr, 1) If Not Dic.exists(NameArr(I, 1)) Then Dic.Add (NameArr(I, 1)), NameArr(I, 1) End If Next For Each Key In Dic.keys J = J + 1 sWb.Sheets("NPP").Copy Set dWb = ActiveWorkbook With dWb Cells.Copy Cells.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False 'xoa cot gi thuc hien vao day .Sheets("NPP").Name = "Sheet1" Sheets.Add after:=Sheets(Sheets.Count) With ActiveSheet sWb.Sheets("Chi Tiet DMS").ListObjects("Table1").Range.AutoFilter Field:=11, Criteria1:=Key sWb.Sheets("Chi Tiet DMS").Range("A1:K" & sWb.Sheets("Chi Tiet DMS").Range("K" & Rows.Count).End(3).Row).Copy .Range("A1").PasteSpecial (xlPasteValues) End With End With 'K?T QU? TB MVO AUDIT_DMS 25 T8.2020 _ ASM Bùi T?n Phúc dWb.Close True, sPath & "\KET QUA TB MVO AUDIT_DMS " & Ngay & ThangNam & "_ASM " & Key & ".xlsx" Next Set Dic = Nothing MsgBox "Hoan thanh " & J & " file!" With Application .ScreenUpdating = True .DisplayAlerts = True .Calculation = xlCalculationAutomatic End With End Sub
Bạn thử đổi tên thư mục thành tiếng việt không dấu (hoặc chuyển file đó ra folder mới với đường dẫn ngắn hơn) xem saodạ máy công ty ạ
Bài đã được tự động gộp:
Dạ anh ơi, anh cho em hỏi nó bị lỗi gì ấy ạ\
View attachment 244424
View attachment 244423
Mình cũng không rõ nữa, bên mình chạy hoàn toàn bình thườngDạ em chuyển qua đây cũng ko có tiếng việt, không biết sao cũng ko được
View attachment 244425
dạ e biết lý do rồi ạ, do em bật file excel khác nữaMình cũng không rõ nữa, bên mình chạy hoàn toàn bình thường
Hoặc bạn thử tạo folder mới ở ổ D xem sao
View attachment 244427
Nay mình hơi bận, để lát xem có thời gian thì mình xem lại cho. Không thì phải chờ ngày mai mình nghỉ mới làm đượcanh có thể giúp em đánh lại stt với định dạng được không ạ có filter tiêu đề nữa
dạ em cảm ơn anh ạ, mai cũng được ạ <3Nay mình hơi bận, để lát xem có thời gian thì mình xem lại cho. Không thì phải chờ ngày mai mình nghỉ mới làm được
Em cảm ơn anh nhiều lắm ạ <3Nay mình hơi bận, để lát xem có thời gian thì mình xem lại cho. Không thì phải chờ ngày mai mình nghỉ mới làm được
Qua hứa nay giúp bạn nên phải tranh thủ vào làm giữ lời hứadạ em cảm ơn anh ạ, mai cũng được ạ <3
Bài đã được tự động gộp:
Em cảm ơn anh nhiều lắm ạ <3
Sub TachSheet()
Dim sWb As Workbook, dWb As Workbook, nWs As Worksheet, Dic As Object
Dim NameArr(), I&, J&, K&, ctLr&
Dim Ngay&, ThangNam As String, sPath As String, Lob As Object
'******************************************************************************
With Application
.CopyObjectsWithCells = False
.ScreenUpdating = False
.DisplayAlerts = False
.Calculation = xlCalculationManual
End With
'******************************************************************************
Set Dic = CreateObject("Scripting.Dictionary")
Set sWb = ThisWorkbook
sPath = sWb.Path
'******************************************************************************
With sWb.Sheets("Chi Tiet DMS")
ctLr = .Range("K" & Rows.Count).End(3).Row
Ngay = Day(.Range("K2"))
ThangNam = " T" & Month(.Range("K2")) & "." & Year(.Range("K2"))
Set Lob = .ListObjects("Table1")
If Lob.ShowAutoFilter Then
Lob.AutoFilter.ShowAllData
Else
Lob.ShowAutoFilter = True
End If
NameArr = Lob.ListColumns(11).DataBodyRange.Value
End With
'******************************************************************************
For I = 1 To UBound(NameArr, 1)
If Not Dic.exists(NameArr(I, 1)) Then
Dic.Add (NameArr(I, 1)), ""
End If
Next
For Each Key In Dic.keys
J = J + 1
sWb.Sheets("NPP").Copy
Cells.Copy
Cells.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
'xoa cot gi thuc hien vao day
Set dWb = ActiveWorkbook
dWb.Sheets("NPP").Name = "Sheet1"
sWb.Sheets("Chi Tiet DMS").Copy after:=dWb.Sheets("Sheet1")
Cells.Copy
Cells.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
With dWb.Sheets("Chi Tiet DMS")
Set Lob = .ListObjects("Table1")
.Columns("L:XFD").Clear
.Name = "Sheet2"
Lob.Range.AutoFilter Field:=11, Criteria1:="<>" & Key
Lob.DataBodyRange.Delete
Lob.AutoFilter.ShowAllData
For Each cell In Lob.ListColumns(1).DataBodyRange
K = K + 1
cell.Value = K
Next
End With
'K?T QU? TB MVO AUDIT_DMS 25 T8.2020 _ ASM Bùi T?n Phúc
dWb.Close True, sPath & "\KET QUA TB MVO AUDIT_DMS " & Ngay & ThangNam & "_ASM " & Key & ".xlsx"
Next
'******************************************************************************
Set Dic = Nothing
MsgBox "Hoan thanh " & J & " file!"
With Application
.CopyObjectsWithCells = True
.ScreenUpdating = True
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Dạ em cảm ơn anh nhiều ạ <3Qua hứa nay giúp bạn nên phải tranh thủ vào làm giữ lời hứa
Bạn nên tạo một folder riêng chứa file này để khi chạy ra các file nhỏ nằm trong một thư mục khỏi lộn xộn nhiều file
PHP:Sub TachSheet() Dim sWb As Workbook, dWb As Workbook, nWs As Worksheet, Dic As Object Dim NameArr(), I&, J&, K&, ctLr& Dim Ngay&, ThangNam As String, sPath As String, Lob As Object '****************************************************************************** With Application .CopyObjectsWithCells = False .ScreenUpdating = False .DisplayAlerts = False .Calculation = xlCalculationManual End With '****************************************************************************** Set Dic = CreateObject("Scripting.Dictionary") Set sWb = ThisWorkbook sPath = sWb.Path '****************************************************************************** With sWb.Sheets("Chi Tiet DMS") ctLr = .Range("K" & Rows.Count).End(3).Row Ngay = Day(.Range("K2")) ThangNam = " T" & Month(.Range("K2")) & "." & Year(.Range("K2")) Set Lob = .ListObjects("Table1") If Lob.ShowAutoFilter Then Lob.AutoFilter.ShowAllData Else Lob.ShowAutoFilter = True End If NameArr = Lob.ListColumns(11).DataBodyRange.Value End With '****************************************************************************** For I = 1 To UBound(NameArr, 1) If Not Dic.exists(NameArr(I, 1)) Then Dic.Add (NameArr(I, 1)), "" End If Next For Each Key In Dic.keys J = J + 1 sWb.Sheets("NPP").Copy Cells.Copy Cells.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False 'xoa cot gi thuc hien vao day Set dWb = ActiveWorkbook dWb.Sheets("NPP").Name = "Sheet1" sWb.Sheets("Chi Tiet DMS").Copy after:=dWb.Sheets("Sheet1") Cells.Copy Cells.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False With dWb.Sheets("Chi Tiet DMS") Set Lob = .ListObjects("Table1") .Columns("L:XFD").Clear .Name = "Sheet2" Lob.Range.AutoFilter Field:=11, Criteria1:="<>" & Key Lob.DataBodyRange.Delete Lob.AutoFilter.ShowAllData For Each cell In Lob.ListColumns(1).DataBodyRange K = K + 1 cell.Value = K Next End With 'K?T QU? TB MVO AUDIT_DMS 25 T8.2020 _ ASM Bùi T?n Phúc dWb.Close True, sPath & "\KET QUA TB MVO AUDIT_DMS " & Ngay & ThangNam & "_ASM " & Key & ".xlsx" Next '****************************************************************************** Set Dic = Nothing MsgBox "Hoan thanh " & J & " file!" With Application .CopyObjectsWithCells = True .ScreenUpdating = True .DisplayAlerts = True .Calculation = xlCalculationAutomatic End With End Sub