vonguyen3745
Thành viên hoạt động
- Tham gia
- 18/7/09
- Bài viết
- 145
- Được thích
- 5
Chào Bạn, qua tìm hiểu với khả năng hiểu của OT thì nguyên nhân do xử lý đoạn này:Các file đều có cấu trúc kiểu thế này:
D:\TIEU_HOC\SynologyDrive\c1_anha\NAMHOC_2021-2022\1.TCCB\BIEU_MAU_EXCEL\DOINGU_TH_THANG7.xlsx
Code của bài 2 là sẽ dán dữ liệu nối đuôi nhau. Nếu bạn muốn gán dữ liệu ở dòng 4 thì dòng tiêu đề phải là dòng số 3 nhé. Lưu ý là trước khi chạy code phải xóa hết dữ liệu cũ, vì code sẽ dán nối đuôi so với dữ liệu đang cóỞ Bài 2 mình không biết chỗ chỉnh để nó bắt đầu dán dữ liệu ở dòng A4, bạn biết chỉnh giúp mình với.
Chào anh Quang Hải, em thấy bài này dùng "FileSystemObject" để kiểm tra sự phù hợp của file có tồn tại hay không là khả thi nhất Anh nhỉ?Code của bài 2 là sẽ dán dữ liệu nối đuôi nhau. Nếu bạn muốn gán dữ liệu ở dòng 4 thì dòng tiêu đề phải là dòng số 3 nhé. Lưu ý là trước khi chạy code phải xóa hết dữ liệu cũ, vì code sẽ dán nối đuôi so với dữ liệu đang có
Mấy cái này thuộc dạng cơ bản. Chẳng qua đang chán vì dịch covid nên chả buồn viết code. Đang bận cuốc đất trồng rau. Bài này trong khả năng của bạn mà.Chào anh Quang Hải, em thấy bài này dùng "FileSystemObject" để kiểm tra sự phù hợp của file có tồn tại hay không là khả thi nhất Anh nhỉ?
Hic Anh còn có đất để cuốc , chỗ em hết rồi chỉ có mấy mét vuông để ăn nằm thôi Anh hiện tại đi làm về đến nhà là nằm và thở thôi anh ạ,chán hơn con gián.Mấy cái này thuộc dạng cơ bản. Chẳng qua đang chán vì dịch covid nên chả buồn viết code. Đang bận cuốc đất trồng rau. Bài này trong khả năng của bạn mà.
Thế em với bác có thể đổi chỗ cho nhau được mà, bác viết code để em cuốc đất cho, em bên chân tay nên việc cuốc đất là việc nhỏ thôi.Mấy cái này thuộc dạng cơ bản. Chẳng qua đang chán vì dịch covid nên chả buồn viết code. Đang bận cuốc đất trồng rau. Bài này trong khả năng của bạn mà.
- Code luôn chép đè lên dữ liệu cũ tại sheet đích. Do đó, muốn khỏi lộn xộn dữ liệu mới và cũ còn sót lại thì phải xóa hết dữ liệu cũ đi rồi chép dữ liệu mới.- Ý em là ở sheet đích, nếu có sẵn dữ liệu rồi thì code nó không copy đè lên dữ liệu ở đó.
- Em muốn chỉnh ô đầu tiên dán dữ liệu thì chỉnh thế nào bác, nó mặc định là ô A2, nhiều khi phần tiêu đề nó có 3-4 dòng thì lại không chạy được
Chỉnh títhanks, sao em cứ đổi tên Sheet2 thành sheets khác nó lại không chạy nhỉ, em đã đổi tên cả trên excel và code mà nó toàn báo lỗi.
View attachment 262771
View attachment 262773
Sub ABC()
Dim sArr(), cn As Object, i&, fRow&
With Sheets("Sheet1")
sArr = .Range("A2", .Range("C" & Rows.Count).End(xlUp)).Value
End With
Set cn = CreateObject("ADODB.Connection")
On Error Resume Next
With Sheets("DanhSach")
i = .Range("B" & Rows.Count).End(xlUp).Row
If i > 3 Then .Range("B4:Z" & i).ClearContents 'Xoa ket qua cu
For i = 1 To UBound(sArr)
fRow = .Range("B" & Rows.Count).End(xlUp).Row + 1
If fRow < 4 Then fRow = 4
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sArr(i, 1) & ";Extended Properties=""Excel 12.0;HDR=No"";"
.Range("B" & fRow).CopyFromRecordset cn.Execute("select * from [" & sArr(i, 2) & "$" & sArr(i, 3) & "] where f1 is not null")
cn.Close
Next i
End With
Set cn = Nothing
End Sub
Một cách làm khác, bạn tham khảo thêm:
Mã:Option Explicit Dim sFile As String Sub DataLink(ByRef cell_ As Range, ByVal sLink As String, ByVal sFileName As String) On Error GoTo Err_ cell_.FormulaArray = sLink: cell_.Value = cell_.Value If Len(sFile) = 0 Then sFile = sFileName Else sFile = sFile & vbNewLine & sFileName Err_: End Sub Sub RunMe() Dim sheet As Worksheet, start_cell As Range, cell_ As Range, str As String, tmp Dim sFolder As String, sFileName As String, sShName As String, sRange As String Dim sLink As String Application.ScreenUpdating = False Set sheet = Sheet2: sheet.Cells.ClearContents Set start_cell = Sheet1.Range("A2") sFile = Empty Do Until start_cell.Value = "" str = start_cell.Value tmp = Split(str, "\") sFileName = tmp(UBound(tmp)) sFolder = Mid(str, 1, Len(str) - Len(sFileName) - 1) If Len(Dir(sFolder & "\" & sFileName)) > 0 Then sShName = start_cell.Offset(, 1).Value sRange = start_cell.Offset(, 2).Value Set cell_ = sheet.Range("A" & Rows.Count).End(xlUp).Offset(1) Set cell_ = cell_.Resize(sheet.Range(sRange).Rows.Count, sheet.Range(sRange).Columns.Count) sLink = "='" & sFolder & "\[" & sFileName & "]" & sShName & "'!" & sRange & "" DataLink cell_, sLink, sFileName End If Set start_cell = start_cell.Offset(1) Loop Application.ScreenUpdating = True sheet.Activate If Len(sFile) > 0 Then sFile = "File link OK:" & vbNewLine & sFile End If MsgBox "Kêt thúc " & vbNewLine & sFile, vbOKOnly + vbInformation End Sub