Trần Văn Bình
GTVT
- Tham gia
- 30/7/06
- Bài viết
- 423
- Được thích
- 383
- Nghề nghiệp
- GTVT
Thử sửa thế này xem có được không?Mình có nhiều file dữ liệu nay muốn gộp các file vào 1 file đồng thời xử lý dữ liệu dạng số ví dụ cột dữ liệu nguồn có 3.25 thành 3,25
mình sưu tầm Code có sửa lại mà bị lỗi có file đính kèm
Rất mong các bạn giúp
Sub GetData()
Dim Dc As Long, J As Long
Dim Ma_hoc_vien As String
Dim Arr(), sql As String
With Sheet2
Dc = .Range("C1000").End(xlUp).Row
Arr = .Range("C7:D" & Dc)
For J = 1 To UBound(Arr)
Ma_hoc_vien = Ma_hoc_vien & ",'" & Arr(J, 1) & "'"
Next
Ma_hoc_vien = Mid(Ma_hoc_vien, 2)
End With
sql = "SELECT f1, REPLACE(f2,'.',','), f3, f4, f4, REPLACE(f6,'.',','), f7, f8, f9, f10, f11, f12, f13, f14 FROM [Sheet1$B2:O65000] where f7 IN (" & Ma_hoc_vien & ")"
Dim cn As Object, rs As Object, list_path As Variant, ex_path As Variant
Dim lR As Long
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
list_path = SelectExcelFiles(, True)
If IsArray(list_path) = False Then Exit Sub
Sheet1.Range("B6:P1048500").ClearContents
For Each ex_path In list_path
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ex_path & _
";Extended Properties=""Excel 12.0;HDR=No;"""
With Sheet1
lR = .Range("C" & .Rows.Count).End(xlUp).Row + 1
Set rs = cn.Execute(sql)
If Not rs.EOF Then .Range("B" & lR).CopyFromRecordset rs
End With
rs.Close
cn.Close
Next ex_path
Set cn = Nothing: Set rs = Nothing
Set list_path = Nothing
End Sub
Cám ơn bạn rất nhiều đầy le code mình đúng nguyện vọng của mình rồiThử sửa thế này xem có được không?
Mã:Sub GetData() Dim Dc As Long, J As Long Dim Ma_hoc_vien As String Dim Arr(), sql As String With Sheet2 Dc = .Range("C1000").End(xlUp).Row Arr = .Range("C7:D" & Dc) For J = 1 To UBound(Arr) Ma_hoc_vien = Ma_hoc_vien & ",'" & Arr(J, 1) & "'" Next Ma_hoc_vien = Mid(Ma_hoc_vien, 2) End With sql = "SELECT f1, REPLACE(f2,'.',','), f3, f4, f4, REPLACE(f6,'.',','), f7, f8, f9, f10, f11, f12, f13, f14 FROM [Sheet1$B2:O65000] where f7 IN (" & Ma_hoc_vien & ")" Dim cn As Object, rs As Object, list_path As Variant, ex_path As Variant Dim lR As Long Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") list_path = SelectExcelFiles(, True) If IsArray(list_path) = False Then Exit Sub Sheet1.Range("B6:P1048500").ClearContents For Each ex_path In list_path cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ex_path & _ ";Extended Properties=""Excel 12.0;HDR=No;""" With Sheet1 lR = .Range("C" & .Rows.Count).End(xlUp).Row + 1 Set rs = cn.Execute(sql) If Not rs.EOF Then .Range("B" & lR).CopyFromRecordset rs End With rs.Close cn.Close Next ex_path Set cn = Nothing: Set rs = Nothing Set list_path = Nothing End Sub
Kéo rộng cột chứa dữ liệu ngày ra đi bạn.Mình hỏi trong chủ đề trên. Khi mình chuyển đến máy khác thì bị báo lối : dales and time that are regalive or toolarge show as #####. Nhờ các bạn hướng dẫn khắc phục
Càng lúc bạn càng ỷ lại cho nên đâm cẩu thả. chỉ có chép lại câu báo lỗi mà bạn cũng không làm trọn vẹn.Mình hỏi trong chủ đề trên. Khi mình chuyển đến máy khác thì bị báo lối : dales and time that are regalive or toolarge show as #####. Nhờ các bạn hướng dẫn khắc phục
Bạn thấy nơi thành fomula là 1 dãy số mặc dù mình đặt custom trước khí load về hoặc sau vẫn không đượcCàng lúc bạn càng ỷ lại cho nên đâm cẩu thả. chỉ có chép lại câu báo lỗi mà bạn cũng không làm trọn vẹn.
Đọc lại chỗ bôi đậm bên trên xem nó có mấy chỗ sai.
Kiểm soát lại các cột ấy xem nó định dạng custom là gì.
Không biết thế nào cùng 1 file máy tính bàn ở nhà thì chạy tốt, sang laptop và máy cơ quan lại chạy không được. Để mình đối chiếu lại ngày tháng hệ thống xem saoKhả năng ngày bị lỗi, giờ còn lưu học viên 1900 thì dễ sai lằm, hoặc ngày vượt 31/12/9999 (2958466).