Tải về coi có thấy code đâu chứ ??????????? có lộn file ko vậyChào các A/C! Em đã thiết lập code để copy dữ liệu ở các file lẻ (file đính kèm). Nhưng không hiểu sao code có vấn đề gì mà không thể copy được? A/C chỉ thêm cho em nhé!
ngại ghê có mô mà có chứ...?????????Hỏng lẻ máy mình có ma tải về mở lên nó biến luôn@kieu manh ơi, code ở trong file master mà?
Anh xem lai nhé! Em mở vẫn có mà. Nó ở module mdLapBC.Xin thề là mình cũng chẳng đọc được dòng code nào...
Option Explicit
Sub CapNhat_data()
Dim master As Worksheet, sh As Worksheet
Dim wk As Workbook
Dim strFolderPath As String
Dim selectedfiles As Variant
Dim iFileNum As Integer, iLastRowReport As Integer, iNumberOfRowsToPaste As Integer
Dim strFilename As String
Dim rDate As Range, rDesc As Range, rUnit As Range, rQuantity As Range, rPrice As Range, rAmount As Range, rRemark As Range
Dim iCurrentLastRow As Integer, iRowStartToPaste As Integer
getSpeed (True)
Set master = ActiveWorkbook.Sheets("Data")
strFolderPath = ActiveWorkbook.Path
ChDrive strFolderPath
ChDir strFolderPath
selectedfiles = Application.GetOpenFilename( _
FileFilter:="Excel File(*.xls*),*.xlsx*", MultiSelect:=True)
On Error GoTo NoFileselected
For iFileNum = LBound(selectedfiles) To UBound(selectedfiles)
strFilename = selectedfiles(iFileNum)
Set wk = Workbooks.Open(strFilename)
For Each sh In wk.Sheets
If sh.Name Like "*-REPORT" Then
With sh
iLastRowReport = .Range("A" & Rows.Count).End(xlUp).Row
iNumberOfRowsToPaste = iLastRowReport - 6 + 1
rDate = .Range("A6:A" & iLastRowReport)
rDesc = .Range("B6:B" & iLastRowReport)
rUnit = .Range("C6:C" & iLastRowReport)
rQuantity = .Range("D6:D" & iLastRowReport)
rPrice = .Range("E6:E" & iLastRowReport)
rAmount = .Range("F6:F" & iLastRowReport)
rRemark = .Range("G6:G" & iLastRowReport)
With master
iCurrentLastRow = .Range("A" & Rows.Count).End(xlUp).Row
iRowStartToPaste = iCurrentLastRow + 1
.Range("A" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rDate.Value2
.Range("B" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rDesc.Value2
.Range("C" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rUnit.Value2
.Range("D" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rQuantity.Value2
.Range("E" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rPrice.Value2
.Range("F" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rAmount.Value2
.Range("G" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rRemark.Value2
End With
End With
End If
Next sh
wk.Close
Next
getSpeed (False)
NoFileselected:
Exit Sub
End Sub
Thử code này coi đúng ý khôngAnh xem lai nhé! Em mở vẫn có mà. Nó ở module mdLapBC.
Mã:Option Explicit Sub CapNhat_data() Dim master As Worksheet, sh As Worksheet Dim wk As Workbook Dim strFolderPath As String Dim selectedfiles As Variant Dim iFileNum As Integer, iLastRowReport As Integer, iNumberOfRowsToPaste As Integer Dim strFilename As String Dim rDate As Range, rDesc As Range, rUnit As Range, rQuantity As Range, rPrice As Range, rAmount As Range, rRemark As Range Dim iCurrentLastRow As Integer, iRowStartToPaste As Integer getSpeed (True) Set master = ActiveWorkbook.Sheets("Data") strFolderPath = ActiveWorkbook.Path ChDrive strFolderPath ChDir strFolderPath selectedfiles = Application.GetOpenFilename( _ FileFilter:="Excel File(*.xls*),*.xlsx*", MultiSelect:=True) On Error GoTo NoFileselected For iFileNum = LBound(selectedfiles) To UBound(selectedfiles) strFilename = selectedfiles(iFileNum) Set wk = Workbooks.Open(strFilename) For Each sh In wk.Sheets If sh.Name Like "*-REPORT" Then With sh iLastRowReport = .Range("A" & Rows.Count).End(xlUp).Row iNumberOfRowsToPaste = iLastRowReport - 6 + 1 rDate = .Range("A6:A" & iLastRowReport) rDesc = .Range("B6:B" & iLastRowReport) rUnit = .Range("C6:C" & iLastRowReport) rQuantity = .Range("D6:D" & iLastRowReport) rPrice = .Range("E6:E" & iLastRowReport) rAmount = .Range("F6:F" & iLastRowReport) rRemark = .Range("G6:G" & iLastRowReport) With master iCurrentLastRow = .Range("A" & Rows.Count).End(xlUp).Row iRowStartToPaste = iCurrentLastRow + 1 .Range("A" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rDate.Value2 .Range("B" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rDesc.Value2 .Range("C" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rUnit.Value2 .Range("D" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rQuantity.Value2 .Range("E" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rPrice.Value2 .Range("F" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rAmount.Value2 .Range("G" & iRowStartToPaste).Resize(iNumberOfRowsToPaste, 1) = rRemark.Value2 End With End With End If Next sh wk.Close Next getSpeed (False) NoFileselected: Exit Sub End Sub
Sub Tonghop()
Dim X&, I&, Sh As Worksheet, CurSh As Worksheet, Data()
Set CurSh = Sheets("Data")
X = Application.GetOpenFilename("Excel Files,*.xls?", , , , True)
If Not IsArray(X) Then Exit Sub
For I = 1 To UBound(X)
With Workbooks.Open(X(I), 0)
For Each Sh In .Worksheets
If Sh.Name Like "*REPORT" Then
Data = Sh.Range("A6", Sh.[A65536].End(3)).Resize(, 7).Value
CurSh.[A65536].End(3)(2).Resize(UBound(Data), 7) = Data
End If
Next
.Close False
End With
Next
End Sub
Lẽ ra phải nghĩ là nó ngắn trước. Sau khi viết ngắn mà nó không chịu chạy thì mới thêm râu ria vô cho nó chạy. Theo kinh nghiệm thì sau mỗi cặp lệnh thì thử code 1 cái coi nó có ra đúng như mình mong đợi hay không rồi mới viết tiếp. Chứ viết cả rừng rồi mới test code thì biết đường nào mà tìm.Cám ơn anh @quanghai1969 nhiều! Em không nghĩ nó lại ngắn đến vậy. Code kia em tìm được chỗ sai rùi. Chỗ sai đó không nên có. Vậy mà....!
Lẽ ra phải nghĩ là nó ngắn trước. Sau khi viết ngắn mà nó không chịu chạy thì mới thêm râu ria vô cho nó chạy. Theo kinh nghiệm thì sau mỗi cặp lệnh thì thử code 1 cái coi nó có ra đúng như mình mong đợi hay không rồi mới viết tiếp. Chứ viết cả rừng rồi mới test code thì biết đường nào mà tìm.
Dù gì thì nhìn đoạn code gốc cũng thán phục sự kiên nhẫn thiệt đó. Dù không gọn nhưng được cái hoành tráng lệ...
Em thấy câu này chưa hiểu lắmThử code này coi đúng ý không
PHP:Sub Tonghop() Dim X, I&, Sh As Worksheet, CurSh As Worksheet, Data() Set CurSh = Sheets("Data") X = Application.GetOpenFilename("Excel Files,*.xls?", , , , True) If Not IsArray(X) Then Exit Sub For I = 1 To UBound(X) With Workbooks.Open(X(I), 0) For Each Sh In .Worksheets If Sh.Name Like "*REPORT" Then Data = Sh.Range("A6", Sh.[A65536].End(3)).Resize(, 7).Value CurSh.[A65536].End(3)(2).Resize(UBound(Data), 7) = Data End If Next .Close False End With Next End Sub
I & , chử & đặt sau I có nghĩa là gì hả anh?Dim X, I&,
Em thấy câu này chưa hiểu lắm
I & , chử & đặt sau I có nghĩa là gì hả anh?