Không lấy đủ dữ liệu bằng kết nối ADO (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài

shnhatha221108

Thành viên chính thức
Tham gia
2/10/18
Bài viết
73
Được thích
13
Tôi sử dung code của bác Hai Lúa Miền Tây lấy dữ liều từ File_Nguon vào file DATA .Kết quả hiển thị dữ liệu tại sheets(TH) cột E của file DATA không có dữ liệu so với dữ liệu nguồn
Mong anh chị em diễm đàn kiểm tra chỉ bảo giúp
 

File đính kèm

Tôi sử dung code của bác Hai Lúa Miền Tây lấy dữ liều từ File_Nguon vào file DATA .Kết quả hiển thị dữ liệu tại sheets(TH) cột E của file DATA không có dữ liệu so với dữ liệu nguồn
Mong anh chị em diễm đàn kiểm tra chỉ bảo giúp
Tôi kiểm tra lại thấy bình thường mà, bạn nói thiếu dữ liệu là thiếu cái gì?
 
Upvote 0
Tôi kiểm tra lại thấy bình thường mà, bạn nói thiếu dữ liệu là thiếu cái gì?
Chào anh cảm ơn anh đã xem bài..
Khi lấy dữ liệu về thì cột E không có dữ liệu..
Nhờ anh xem giúp mặc dù đã để Imex=1.Nếu định dạng lại file nguồn thì sẽ lấy được đủ dữ liệu nhưng do file nguồn được trính xuất từ một phần mềm khác cập nhật theo ngày.Nếu mỗi lần thay đổi cập nhật dữ liệu lại phải định dạng lại file nguồn thì sẽ rất bất tiện.Nên muốn nhờ anh chị em tìm hiểu lỗi giúp.
Ảnh chụp màn hình 2024-04-28 123705.png
 
Lần chỉnh sửa cuối:
Upvote 0
Chào anh cảm ơn anh đã xem bài..
Khi lấy dữ liệu về thì cột E không có dữ liệu..
Nhờ anh xem giúp mặc dù đã để Imex=1.Nếu định dạng lại file nguồn thì sẽ lấy được đủ dữ liệu nhưng do file nguồn được trính xuất từ một phần mềm khác cập nhật theo ngày.Nếu mỗi lần thay đổi cập nhật dữ liệu lại phải định dạng lại file nguồn thì sẽ rất bất tiện.Nên muốn nhờ anh chị em tìm hiểu lỗi giúp.
Sủa lại vầy nha bạn:

Mã:
            With cnn
                If Val(Application.Version) < 12 Then
                    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                                      & "Data Source=" & Fname & ";Extended Properties=""Excel 8.0;HDR=Yes;Imex=0"";"
                Else
           '    Fname = .SelectedItems
                    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                                      & "Data Source=" & Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1) & ";Extended Properties=""Excel 12.0;HDR=Yes;Imex=0"";"
                End If
                .Open
            
            'For i = 0 To UBound(shNameNguon)
          
                lsSQL = "SELECT * FROM [DATA$A1:AG65536]"

Có 2 điểm cần sửa:

1) Cho HDR tất cả bằng Yes

2) [DATA$A1:AG65536]" sửa số 2 thành số 1 nha.
 
Upvote 0
Sủa lại vầy nha bạn:

Mã:
            With cnn
                If Val(Application.Version) < 12 Then
                    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                                      & "Data Source=" & Fname & ";Extended Properties=""Excel 8.0;HDR=Yes;Imex=0"";"
                Else
           '    Fname = .SelectedItems
                    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                                      & "Data Source=" & Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1) & ";Extended Properties=""Excel 12.0;HDR=Yes;Imex=0"";"
                End If
                .Open
           
            'For i = 0 To UBound(shNameNguon)
         
                lsSQL = "SELECT * FROM [DATA$A1:AG65536]"

Có 2 điểm cần sửa:

1) Cho HDR tất cả bằng Yes

2) [DATA$A1:AG65536]" sửa số 2 thành số 1 nha.
Tôi đã thử nhưng tại sao vẫn không được nhỉ vùng dữ liệu vẫn bị trắng.
Tôi đã thử bằng cách chọn toàn bộ trang dữ liệu Nguon chọn định dạng Chung (General) rồi copy pase 123 toàn bộ trang tính lưu lại.Khi đó có thể lấy đủ dữ liệu côt E.Anh xem lại giúp
 
Upvote 0
Tôi đã thử nhưng tại sao vẫn không được nhỉ vùng dữ liệu vẫn bị trắng.
Tôi đã thử bằng cách chọn toàn bộ trang dữ liệu Nguon chọn định dạng Chung (General) rồi copy pase 123 toàn bộ trang tính lưu lại.Khi đó có thể lấy đủ dữ liệu côt E.Anh xem lại giúp
Tôi nghĩ ra rồi, khi dùng ADO với Excel nếu cột nào mà nó dò trong vòng 8 hàng đầu tiên mà không có dữ liệu, mặc nhiên nó hiểu cột đó không có gì và nó sẽ bỏ qua. Khắc phục bằng cách nếu kiểm tra dữ liệu gốc, thấy cột nào có hơn 8 hàng bị rỗng, thì điền gì đó vào hàng đầu tiên của cột đó (lưu ý, nếu cột đó dạng Text thì ghi bằng chữ, cột đó dạng Number thì ghi bằng số, trường hợp này là số trong định dạng chuỗi, nên ghi vào hàng đầu tiên là chữ).
 
Lần chỉnh sửa cuối:
Upvote 0
Chắc bạn ấy quên kéo thanh cuộn xuống để xem các dòng bên dưới...:D

Tôi nghĩ ra rồi, khi dùng ADO với Excel nếu cột nào mà nó dò trong vòng 8 hàng đầu tiên mà không có dữ liệu, mặc nhiên nó hiểu cột đó không có gì và nó sẽ bỏ qua. Khắc phục bằng cách nếu kiểm tra dữ liệu gốc, thấy cột nào có hơn 8 hàng bị rỗng, thì điền gì đó vào hàng đầu tiên của cột đó (lưu ý, nếu cột đó dạng Text thì ghi bằng chữ, cột đó dạng Number thì ghi bằng số, trường hợp này là số trong định dạng chuỗi, nên ghi vào hàng đầu tiên là chữ).
Vâng e hiểu rồi..cảm ơn bác chỉ bảo.Em đã thử phương pháp của bác kết quả là OK kể cả khi xóa đi dữ liệu thêm vào và lưu lại thì vẫn cho kết quả đúng,tức là vẫn phải tác động vào file nguồn.Ngoài phương pháp đó có thể khắc phục bằng phương pháp nào không phải tác động file Nguon hoặc code nào khác có thể mở ngầm lấy dữ liệu khộng ạ?
Mong bác và anh chị em tìm hiểu giúp.
Chúc bác và anh chị em diễn dàn có ngày nghỉ thoải mái vui vẻ!
 
Upvote 0
Vâng e hiểu rồi..cảm ơn bác chỉ bảo.Em đã thử phương pháp của bác kết quả là OK kể cả khi xóa đi dữ liệu thêm vào và lưu lại thì vẫn cho kết quả đúng,tức là vẫn phải tác động vào file nguồn.Ngoài phương pháp đó có thể khắc phục bằng phương pháp nào không phải tác động file Nguon hoặc code nào khác có thể mở ngầm lấy dữ liệu khộng ạ?
Mong bác và anh chị em tìm hiểu giúp.
Chúc bác và anh chị em diễn dàn có ngày nghỉ thoải mái vui vẻ!
Chỉ có cách dùng workbooks.open ...
Rồi đọc dữ liệu trực tiếp
Hoặc hiệu chỉnh cột E bằng code vba thay vì tay rồi đóng file save, sau đó đọc ADO
 
Upvote 0
Upvote 1
Xin nhờ bạn chỉnh giúp câu lệnh trong mã code file đính kèm #1 giúp ạ..!
Theo mình thì khi mà chưa đủ sức thì hãy làm những việc nhẹ trước
Code vầy cũng lấy được dữ liệu rồi. Chú ý lưu file nguồn vào chung thư mục
Mã:
Sub Tong_Hop()
Dim sArr(),  FilePath As String
FilePath = ThisWorkbook.Path & "\DL_Nguon.xlsm" 'Chú ý câu lệnh này
With Workbooks.Open(FilePath, 0)
    With .Sheets("Data")
        sArr = .Range("A2", .Range("A" & Rows.Count).End(3).Resize(, 7)).Value
    End With
    .Close fasle
End With
With Sheets("TH")
    .Range("A2", .Range("A" & Rows.Count).End(3)).Resize(, 7).ClearContents
    .Range("A2").Resize(UBound(sArr), UBound(sArr, 2)) = sArr
End With
End Sub
 
Upvote 0
Xin nhờ bạn chỉnh giúp câu lệnh trong mã code file đính kèm #1 giúp ạ..!
Trường hợp này cũng không giải quyết cho bạn nếu dùng Cstr(F5) được. Giải pháp cho bạn đây:
Mình "lách luật" chút, bảng nguồn có tiêu đề nên khi lấy dữ liệu, ADO mình cho HDR=NO, sau đó mình quét dữ liệu từ ô A1 luôn, code chạy nó hiểu tiêu đề là một Record chứa dữ liệu nên nó "hốt" toàn bộ dữ liệu bên dưới. Sheet TH cho nó xóa từ hàng 1 đến 65536 (Excel 2003). Sau đó gán dữ liệu, nó sẽ bao gồm tiêu đề.

Mã:
Sub TongHop3()
    Dim cnn As Object, lsSQL As String, lrs As Object ', Fname
    Dim Fso As Object, Link As String ', shNameNguon, i As Long
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set cnn = CreateObject("ADODB.Connection")
    Set lrs = CreateObject("ADODB.Recordset")
    'shNameNguon = Array("aaa")
    Application.ScreenUpdating = False

    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Filters.Add "Microsoft Excel Files", "*.xls; *.xlsx; *.xlsb; *.xlsm", 1
        If .Show = -1 Then
            Link = .InitialFileName
        Else
            MsgBox "Ban da khong chon tong hop", vbInformation, "Thông Báo"
            Exit Sub
        End If
       
        'For Each Fname In .SelectedItems
         
            With cnn
                If Val(Application.Version) < 12 Then
                    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                                      & "Data Source=" & Fname & ";Extended Properties=""Excel 8.0;HDR=No;Imex=1"";"
                Else
           '    Fname = .SelectedItems
                    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                                      & "Data Source=" & Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1) & ";Extended Properties=""Excel 12.0 Xml;HDR=No;Imex=1"";"
                End If
                .Open
           
            'For i = 0 To UBound(shNameNguon)
                lsSQL = "SELECT * FROM [DATA$A1:AG65536]"
                lrs.Open lsSQL, cnn, 3, 1
                Sheets("TH").Range("A1:AG65536").ClearContents
                Sheets("TH").Range("A1").CopyFromRecordset lrs
                lrs.Close
            'Next
            End With
        'Next
    End With
 
    Application.ScreenUpdating = True
    cnn.Close
    Set lrs = Nothing
    Set cnn = Nothing
End Sub

Tôi có một thắc mắc, tại sao không cho nó chạy ngầm luôn (cho đường dẫn cố định), mà mỗi lần chạy code mỗi lần chọn mở file?
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy kiểu dữ liệu đúng (chuẩn) nhất của cột D, E mà bạn muốn thiết kế bảng tính là kiểu gì? Tôi không nghĩ nó là kiểu Number.
Nó là kiểu số trong định dạng chuỗi (kiểu mã số, số hóa đơn, số vận đơn v.v...).
 
Upvote 0
Vâng đúng ạ..kiểu ký tự của tôi có thể là dạng định dạng chung cũng có thể là chuỗi ký tự tetx
Nó là kiểu số trong định dạng chuỗi (kiểu mã số, số hóa đơn, số vận đơn v.v...).
Vậy kiểu dữ liệu đúng (chuẩn) nhất của cột D, E mà bạn muốn thiết kế bảng tính là kiểu gì? Tôi không nghĩ nó là kiểu Number.
Lý do tôi sử dụng chạy ngầm là vì nếu sử dụng open wordbook có vấn đề ở chỗ file nguồn trích suất bởi một phần mềm trung gian..khi mở có cảnh báo cập nhật.và lỗi nữa có code tự đông..trường hợp lỗi code khi mở phải tắt lỗi file nguồn như phương pháp bác @Quang_Hải đưa ra rồi thực thi lại code.Còn mở bằng phương pháp ngầm sẽ không phải tác động gì file nguồn ạ
 
Upvote 0
Vâng đúng ạ..kiểu ký tự của tôi có thể là dạng định dạng chung cũng có thể là chuỗi ký tự tetx


Lý do tôi sử dụng chạy ngầm là vì nếu sử dụng open wordbook có vấn đề ở chỗ file nguồn trích suất bởi một phần mềm trung gian..khi mở có cảnh báo cập nhật.và lỗi nữa có code tự đông..trường hợp lỗi code khi mở phải tắt lỗi file nguồn như phương pháp bác @Quang_Hải đưa ra rồi thực thi lại code.Còn mở bằng phương pháp ngầm sẽ không phải tác động gì file nguồn ạ
Ở bài #14 tôi nghĩ đã giải quyết vấn đề của bạn rồi phải không?
 
Upvote 0
Ở bài #14 tôi nghĩ đã giải quyết vấn đề của bạn rồi phải không?
Vâng anh ..tôi trả lời câu hỏi phụ của anh ..tại sao phải sử dụng phương pháp mở ẩn ..ngoài ra nếu để HDR=No khi muốn lọc dữ liệu tại mệnh đề Where thay vì f1,f2,f3...sẽ phải nêu rõ tiêu đề đúng kg ạ
 
Upvote 0
Vâng anh ..tôi trả lời câu hỏi phụ của anh ..tại sao phải sử dụng phương pháp mở ẩn ..ngoài ra nếu để HDR=No khi muốn lọc dữ liệu tại mệnh đề Where thay vì f1,f2,f3...sẽ phải nêu rõ tiêu đề đúng kg ạ
F1, F2, ... Fn là tên gọi cột không được xác định tiêu đề, vì vậy bạn có thể dùng nó để xử lý dữ liệu theo điều kiện đặt ra. Nhưng với bài #14 mà tôi gọi là "lách luật", nó sẽ gặp khó khăn cho bạn nếu ORDER BY vì rất có thể tiêu đề của nó không còn nằm ở vị trí đầu tiên.
 
Upvote 0
F1, F2, ... Fn là tên gọi cột không được xác định tiêu đề, vì vậy bạn có thể dùng nó để xử lý dữ liệu theo điều kiện đặt ra. Nhưng với bài #14 mà tôi gọi là "lách luật", nó sẽ gặp khó khăn cho bạn nếu ORDER BY vì rất có thể tiêu đề của nó không còn nằm ở vị trí đầu tiên.
Vâng cảm ơn anh đúng là vậy phương pháp lách luật của a cũng là một phương pháp hay để tránh 8 dòng trống đầu tiên...nếu không còn phương pháp khác thì thực cảm ơn bác và anh chị e đã tận tình chỉ bảo.
Trươc e có đọc một bài của bác Hai lúa liên quan đến mở ẩn đưa dữ liệu hoặc chỉnh sửa file nguồn bằng cách định dạng cột E rồi lấy dữ liệu ..nhưng do hiểu biết còn hạn hẹp chưa thể tự sửa được code theo ý.!
 
Lần chỉnh sửa cuối:
Upvote 0
nếu không còn phương pháp khác thì thực cảm ơn bác và anh chị e đã tận tình chỉ bảo.
Trươc e có đọc một bài của bác Hai lúa liên quan đến mở ẩn đưa dữ liệu hoặc chỉnh sửa file nguồn bằng cách định dạng cột E rồi lấy dữ liệu ..nhưng do hiểu biết còn hạn hẹp chưa thể tự sửa được code theo ý.!
Dùng ADO lấy dữ liệu Excel nó vẫn còn nhiều hạn chế do đó phải chấp nhận có sự điều chỉnh hoặc dùng phương pháp khác.
Nếu bạn muốn dùng ADO cho Excel, khi gặp file Excel có cột rỗng thì"
- Lấy luôn dòng tiêu đề (như bạn @Hoàng Trọng Nghĩa đã hướng dẫn để ADO nhận dạng là cột Text.
- Mở file nguồn, định chọn định dạng cho từng cột theo yêu cầu (bấm chọn hết cột - Format - chọn Text là được rồi, không cần gõ ký tự mẫu)
Nếu dùng ADO cho file Text thì sẽ dễ dàng hơn trong việc định dạng cột là chỉ cần thêm 1 file text Shema.ini để lưu thông tin kiểu định dạng cho từng cột và ADO tự tìm và đọc file này để lấy dữ liệu chính xác kiểu định dạng vào Recordset.
Do đó nếu được thì tốt nhất bạn nói bên phần mềm xuất ra file Text (.txt, .csv) để để lấy dữ liệu hơn và nhẹ hơn nhiều so với định dạng Excel.
 
Upvote 0
Dùng ADO lấy dữ liệu Excel nó vẫn còn nhiều hạn chế do đó phải chấp nhận có sự điều chỉnh hoặc dùng phương pháp khác.
Nếu bạn muốn dùng ADO cho Excel, khi gặp file Excel có cột rỗng thì"
- Lấy luôn dòng tiêu đề (như bạn @Hoàng Trọng Nghĩa đã hướng dẫn để ADO nhận dạng là cột Text.
- Mở file nguồn, định chọn định dạng cho từng cột theo yêu cầu (bấm chọn hết cột - Format - chọn Text là được rồi, không cần gõ ký tự mẫu)
Nếu dùng ADO cho file Text thì sẽ dễ dàng hơn trong việc định dạng cột là chỉ cần thêm 1 file text Shema.ini để lưu thông tin kiểu định dạng cho từng cột và ADO tự tìm và đọc file này để lấy dữ liệu chính xác kiểu định dạng vào Recordset.
Do đó nếu được thì tốt nhất bạn nói bên phần mềm xuất ra file Text (.txt, .csv) để để lấy dữ liệu hơn và nhẹ hơn nhiều so với định dạng
Vâng tôi hiểu rồi ạ..Xin cảm anh chị em đã chỉ bảo!
 
Upvote 0
Dùng ADO lấy dữ liệu Excel nó vẫn còn nhiều hạn chế do đó phải chấp nhận có sự điều chỉnh hoặc dùng phương pháp khác.
Nếu bạn muốn dùng ADO cho Excel, khi gặp file Excel có cột rỗng thì"
- Lấy luôn dòng tiêu đề (như bạn @Hoàng Trọng Nghĩa đã hướng dẫn để ADO nhận dạng là cột Text.
- Mở file nguồn, định chọn định dạng cho từng cột theo yêu cầu (bấm chọn hết cột - Format - chọn Text là được rồi, không cần gõ ký tự mẫu)
Nếu dùng ADO cho file Text thì sẽ dễ dàng hơn trong việc định dạng cột là chỉ cần thêm 1 file text Shema.ini để lưu thông tin kiểu định dạng cho từng cột và ADO tự tìm và đọc file này để lấy dữ liệu chính xác kiểu định dạng vào Recordset.
Do đó nếu được thì tốt nhất bạn nói bên phần mềm xuất ra file Text (.txt, .csv) để để lấy dữ liệu hơn và nhẹ hơn nhiều so với định dạng
Vâng tôi hiểu rồi ạ..Xin hỏi bạn và anh chị em một vấn đề cuối.
Theo mình thì khi mà chưa đủ sức thì hãy làm những việc nhẹ trước
Code vầy cũng lấy được dữ liệu rồi. Chú ý lưu file nguồn vào chung thư mục
Mã:
Sub Tong_Hop()
Dim sArr(),  FilePath As String
FilePath = ThisWorkbook.Path & "\DL_Nguon.xlsm" 'Chú ý câu lệnh này
With Workbooks.Open(FilePath, 0)
    With .Sheets("Data")
        sArr = .Range("A2", .Range("A" & Rows.Count).End(3).Resize(, 7)).Value
    End With
    .Close fasle
End With
With Sheets("TH")
    .Range("A2", .Range("A" & Rows.Count).End(3)).Resize(, 7).ClearContents
    .Range("A2").Resize(UBound(sArr), UBound(sArr, 2)) = sArr
End With
End Sub
Nhờ bác @Quang_Hải xem giúp.Với code trên khi đến dòng lệnh mỏ file nguồn(Workbooks.Open) file nguồn được mở lên và hiện cảnh báo lỗi code như hình dưới.Vậy mình phải sử dụng câu lệnh gì để bỏ qua lỗi đó thay vì phải bấm END để đồng thời mở 2 file rồi thực thi lại code trên mới lấy được dữ liệu ạ!
 

File đính kèm

  • Screenshot 2024-04-30 171015.png
    Screenshot 2024-04-30 171015.png
    52.1 KB · Đọc: 9
Upvote 0
Vâng tôi hiểu rồi ạ..Xin hỏi bạn và anh chị em một vấn đề cuối.

Nhờ bác @Quang_Hải xem giúp.Với code trên khi đến dòng lệnh mỏ file nguồn(Workbooks.Open) file nguồn được mở lên và hiện cảnh báo lỗi code như hình dưới.Vậy mình phải sử dụng câu lệnh gì để bỏ qua lỗi đó thay vì phải bấm END để đồng thời mở 2 file rồi thực thi lại code trên mới lấy được dữ liệu ạ!
Trong câu lệnh này dưới đây trong thủ tục đó:

sArr = .Range("A2", .Range("A" & Rows.Count).End(3).Resize(, 7)).Value
.Range("A2", .Range("A" & Rows.Count).End(3)).Resize(, 7).ClearContents

Bạn thử thêm dấu chấm (.) tại Rows.Count xem thế nào:

sArr = .Range("A2", .Range("A" & .Rows.Count).End(3).Resize(, 7)).Value

.Range("A2", .Range("A" & .Rows.Count).End(3)).Resize(, 7).ClearContents
 
Upvote 0
Trong câu lệnh này dưới đây trong thủ tục đó:

sArr = .Range("A2", .Range("A" & Rows.Count).End(3).Resize(, 7)).Value
.Range("A2", .Range("A" & Rows.Count).End(3)).Resize(, 7).ClearContents

Bạn thử thêm dấu chấm (.) tại Rows.Count xem thế nào:

sArr = .Range("A2", .Range("A" & .Rows.Count).End(3).Resize(, 7)).Value

.Range("A2", .Range("A" & .Rows.Count).End(3)).Resize(, 7).ClearContents
Cảm ơn anh tôi đã thử nhưng không có kết quả.Bảng thông báo đó là lỗi của File nguồn khi được kích hoạt mở,tự chạy code chứ không phải lỗi code thực thi.Tôi muốn nhờ đặt câu lệnh để ngăn không cho file nguồn mở lên chạy code..Tôi gửi file cả nhà mình xem giúp.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn anh tôi đã thử nhưng không có kết quả.Bảng thông báo đó là lỗi của File nguồn khi được kích hoạt mở,tự chạy code chứ không phải lỗi code thực thi.Tôi muốn nhờ đặt câu lệnh để ngăn không cho file nguồn mở lên chạy code..Tôi gửi file cả nhà mình xem giúp.
Lỗi do code của file nguồn chứ liên quan gì đến code của Quang Hải đâu bạn?
 
Upvote 0
Bạn xuất file ở dạng xlsx, csv ấy. Sao lại chọn xlsm làm gì.
Mở file ở dạng read only, ignore mọi thứ...
Từ excel 2007 dữ liệu được lưu ở tập tin xml. Vậy lôi cổ cái tập tin xml đó ra để lấy dữ liệu thôi.
 
Upvote 0
Upvote 0
C
Bạn xuất file ở dạng xlsx, csv ấy. Sao lại chọn xlsm làm gì.
Mở file ở dạng read only, ignore mọi thứ...
Từ excel 2007 dữ liệu được lưu ở tập tin xml. Vậy lôi cổ cái tập tin xml đó ra để lấy dữ liệu thôi.
Cảm ơn bạn đã quan tâm..bản chất file nguồn được xuất bằng phần mềm tự động của công ty luôn chứa mã code để chạy các định dạng khác trong file nên mới sảy ra lỗi như trên..
 
Upvote 0
Vâng ạ..tôi vẫn giải thích là lỗi file nguồn nên muốn nhờ đặt câu lệnh trong đoạn code Quang Hải để bỏ qua báo lỗi đó và tiếp tục thực thi code lấy dữ liệu ạ
Có nhiều cách, nhưng bạn thử cách đơn giản nhất là copy đoạn code này vào xem:

Sub Tong_Hop()
On Error Resume Next
 
Upvote 0
Có nhiều cách, nhưng bạn thử cách đơn giản nhất là copy đoạn code này vào xem:

Sub Tong_Hop()
On Error Resume Next
Phương pháp này hình như không có tác dụng tôi cũng đã nghĩ đến và đã thử..bởi khi code nguồn kích hoạt thì code thực thi bị ngắt kg hoạt động
 
Upvote 0
Phương pháp này hình như không có tác dụng tôi cũng đã nghĩ đến và đã thử..bởi khi code nguồn kích hoạt thì code thực thi bị ngắt kg hoạt động
Gán câu lệnh đó trong code sheet Nguon xem sao.

Public Sub pFomulaCopy(ows As Worksheet)
On Error Resume Next
 
Upvote 0
Code lỗi thì ngay khi compile lăn ra ngỏm rồi.
On error resume next làm gì có tác dụng gì.
 
Upvote 0
Vâng tôi hiểu rồi ạ..Xin hỏi bạn và anh chị em một vấn đề cuối.

Nhờ bác @Quang_Hải xem giúp.Với code trên khi đến dòng lệnh mỏ file nguồn(Workbooks.Open) file nguồn được mở lên và hiện cảnh báo lỗi code như hình dưới.Vậy mình phải sử dụng câu lệnh gì để bỏ qua lỗi đó thay vì phải bấm END để đồng thời mở 2 file rồi thực thi lại code trên mới lấy được dữ liệu ạ!
Hình như sự việc cũng không ghê gớm lắm đâu
Mã:
Sub Tong_Hop()
Application.EnableEvents = False 'câu lệnh này sẽ chặn sự kiện của file nguồn
Dim sArr(), i As Long, FilePath As String
FilePath = ThisWorkbook.Path & "\DL_Nguon.xlsm"
With Workbooks.Open(FilePath, 0)
    With .Sheets("Data")
        sArr = .Range("A2", .Range("A" & Rows.Count).End(3).Resize(, 7)).Value
    End With
    .Close fasle
End With
With Sheets("TH")
    .Range("A2", .Range("A" & Rows.Count).End(3)).Resize(, 7).ClearContents
    .Range("A2").Resize(UBound(sArr), UBound(sArr, 2)) = sArr
End With
Application.EnableEvents = True
End Sub
 
Upvote 0
Hình như sự việc cũng không ghê gớm lắm đâu
Mã:
Sub Tong_Hop()
Application.EnableEvents = False 'câu lệnh này sẽ chặn sự kiện của file nguồn
Dim sArr(), i As Long, FilePath As String
FilePath = ThisWorkbook.Path & "\DL_Nguon.xlsm"
With Workbooks.Open(FilePath, 0)
    With .Sheets("Data")
        sArr = .Range("A2", .Range("A" & Rows.Count).End(3).Resize(, 7)).Value
    End With
    .Close fasle
End With
With Sheets("TH")
    .Range("A2", .Range("A" & Rows.Count).End(3)).Resize(, 7).ClearContents
    .Range("A2").Resize(UBound(sArr), UBound(sArr, 2)) = sArr
End With
Application.EnableEvents = True
End Sub
Đúng là không ghê gớm đối với nhiều người ghê gớm như các bác...
Em xin cảm ơn sự nhiệt tình giải đáp của bác @Hoàng Trọng Nghĩa,bác @Quang_Hải chúc các bác luôn mạnh khỏe công tác tốt..!
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom