Lưu dữ liệu sang file excel khác đang đóng

Liên hệ QC

newlove

Thành viên mới
Tham gia
27/12/19
Bài viết
28
Được thích
0
Dear anh chị: Có 1 vấn đề cần nhờ ac giúp.
Giả sử mình có 2 file excel nằm ở ổ đĩa :D
Trong đó
- File thứ nhất: 1 file là database: dùng để chứa dữ liệu (đang đóng)
- File thứ 2: là file excel dùng để nhập liệu
Xin hướng dẫn code vba khi: Nhập dữ liệu vào file thứ 2 sẽ tự động lưu sang file thứ 1
Cách làm này tránh nặng file nhập liệu và lưu dữ liệu luôn ạ.
Xin cảm ơn.
 
Dear anh chị: Có 1 vấn đề cần nhờ ac giúp.
Giả sử mình có 2 file excel nằm ở ổ đĩa :D
Trong đó
- File thứ nhất: 1 file là database: dùng để chứa dữ liệu (đang đóng)
- File thứ 2: là file excel dùng để nhập liệu
Xin hướng dẫn code vba khi: Nhập dữ liệu vào file thứ 2 sẽ tự động lưu sang file thứ 1
Cách làm này tránh nặng file nhập liệu và lưu dữ liệu luôn ạ.
Xin cảm ơn.

Bạn dùng ADO nhé, mẫu code như dưới đây do bạn không gửi file đính kèm, chỉnh sửa lại cho phù hợp với file của bạn
Mã:
Sub InsertData()
    Dim sConnect, rsdata As Object
    Dim Snguon, Sinput, sSQL As String
    
    Snguon = "Provider= Microsoft.ACE.OLEDB.12.0; Data Source= " & ThisWorkbook.Path & "\FileNguon.xlsx;" & _
            "Extended Properties=""Excel 12.0;HDR=NO;"";"
    
    Sinput = "[Excel 12.0;HDR=NO;Database=" & ThisWorkbook.FullName & ";]"
    
    Set sConnect = CreateObject("ADODB.Connection")
    Set rsdata = CreateObject("ADODB.Recordset")
    
    If Not sConnect.State = 1 Then
        sConnect.Open Snguon
    End If
    
    sSQL = "INSERT INTO [BISMUTH_CON$] (F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11) SELECT F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11 FROM " & Sinput & ".[DataEntry$A3:K1000] WHERE LEN(F1) > 0"
    rsdata.Open sSQL, sConnect
  
    If sConnect.State = 1 Then
        sConnect.Close
    End If
    If rsdata.State And adStateOpen Then
        rsdata.Close
    End If
    
    Set sConnect = Nothing
    Set rsdata = Nothing

End Sub
 
VBA là bút sa gà chết. Dữ liệu đã sửa xoá rồi không undo được.
Dùng code insert vào file ngoại là nguy hiểm. Dùng ADO lại càng nguy hiểm hơn.

Ít nhất code ghi phải có câu hỏi lại "có muốn ghi dữ liệu vào file ??? hay không"
Tốt hơn hết là code xét trước xem file kia đã chứa dữ liệu ở vùng sắp chép vào hay không và hỏi lại nếu có.
 
VBA là bút sa gà chết. Dữ liệu đã sửa xoá rồi không undo được.
Dùng code insert vào file ngoại là nguy hiểm. Dùng ADO lại càng nguy hiểm hơn.

Ít nhất code ghi phải có câu hỏi lại "có muốn ghi dữ liệu vào file ??? hay không"
Tốt hơn hết là code xét trước xem file kia đã chứa dữ liệu ở vùng sắp chép vào hay không và hỏi lại nếu có.
Vâng, xin cảm ơn anh đã góp ý. Thật ra em gửi code mẫu cho chủ thớt áp dụng. Còn tất nhiên nếu file của em thì sẽ có câu hỏi muốn thực hiện hay không để an toàn (vì lỡ đâu bấm nhầm thực hiện). Nếu em xây dựng file của mình em sẽ tận dụng cơ hội làm bằng ADO ạ, và em sẽ tạo các file chuẩn và ràng buộc chặt chẽ để hạn chế tối đa điều mình không mong muốn khi thực hiện lệnh ạ
 
Vâng, xin cảm ơn anh đã góp ý. Thật ra em gửi code mẫu cho chủ thớt áp dụng. Còn tất nhiên nếu file của em thì sẽ có câu hỏi muốn thực hiện hay không để an toàn (vì lỡ đâu bấm nhầm thực hiện). Nếu em xây dựng file của mình em sẽ tận dụng cơ hội làm bằng ADO ạ, và em sẽ tạo các file chuẩn và ràng buộc chặt chẽ để hạn chế tối đa điều mình không mong muốn khi thực hiện lệnh ạ
Chuẩn thì không nên là F1, F2 .... cho Fields?
Và phải phòng trường hợp người dùng (cẩn thật) bấm nút save/ Insert... nhiều lần

Tóm lại ADO với Excel trường hợp này chứa đầy rủi ro, nên chỉ là vui là bài tập giáo dục thì được (vì cơ sở dữ liệu trong excel vốn dĩ bản thân cells đã là lỏng lẻo)
 
Vâng, xin cảm ơn anh đã góp ý. Thật ra em gửi code mẫu cho chủ thớt áp dụng. Còn tất nhiên nếu file của em thì sẽ có câu hỏi muốn thực hiện hay không để an toàn (vì lỡ đâu bấm nhầm thực hiện). Nếu em xây dựng file của mình em sẽ tận dụng cơ hội làm bằng ADO ạ, và em sẽ tạo các file chuẩn và ràng buộc chặt chẽ để hạn chế tối đa điều mình không mong muốn khi thực hiện lệnh ạ
Thực ra, nếu mà làm nhiều thì hỏi qa hỏi lại cũng mệt.
Cách an toàn trong trường hợp này là thêm đoạn code copy file 'xyz.xlsx' cũ thành 'xyz_savedyyyymmddhhmmss.xlsx' (hoặc vào một folder archive nào đó) trước khi chạy code insert. Lỡ bị chép nhầm cũng còn bản cũ.
Lâu lâu càn quét lại một lần, xoá các bản saved.
 
Thực ra, nếu mà làm nhiều thì hỏi qa hỏi lại cũng mệt.
Cách an toàn trong trường hợp này là thêm đoạn code copy file 'xyz.xlsx' cũ thành 'xyz_savedyyyymmddhhmmss.xlsx' (hoặc vào một folder archive nào đó) trước khi chạy code insert. Lỡ bị chép nhầm cũng còn bản cũ.
Lâu lâu càn quét lại một lần, xoá các bản saved.
Anh nói đúng lắm ạ, trước em làm công ty nước ngoài, sếp người tây của em cứ cập nhật lần nào cũng phải copy file hiện trạng mặc dù file cũng tốn dung lượng.
 
Dear all
Cảm ơn các anh quan tâm
Tại sao chúng ta ko: File nhập liệu các sheet dồn tại 1 sheet tổng hợp, sau đó copy sheet tổng hợp đó và file database, sử dụng tìm dòng cuối sẽ ko bị đè file ạ
Sau khi tắt file nhật liệu sẽ tự động sao chép sang database và xóa dữ liệu hiện tại

Tks anh chị nhé
 
Chuẩn thì không nên là F1, F2 .... cho Fields?
Và phải phòng trường hợp người dùng (cẩn thật) bấm nút save/ Insert... nhiều lần
Anh ơi, em không hiểu câu này của anh ạ, "Chuẩn thì không nên là F1, F2... cho Fields". Anh có thể giải thích rõ hơn được không ạ. Code của em header = No nên em phải dùng là F1, F2... cho Fields ạ
 
Web KT
Back
Top Bottom