Ghi dữ liệu từ file excel đang mở vào file excel đang đóng (1 người xem)

Liên hệ QC

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

hong1989

Thành viên chính thức
Tham gia
10/2/14
Bài viết
53
Được thích
2
Mình có sưu tập được code của anh Hai lua mien tay về việc ghi dữ liệu từ file đang mở vào file đang đóng. nhưng loay hoay mãi không biết cách nào sủa để áp dụng được
Mọi người giúp mình sửa đoạn code này với
Yêu cầu: Mở rộng vùng phạm vi cần update, xóa hết dữ liệu cũ để update dữ liệu mới

Sub Test()
Dim ado As Object
Set ado = CreateObject("ADODB.Connection")
ado.Open ("Provider=Microsoft.JET.OLEDB.4.0;Data Source=""" _
& ThisWorkbook.Path & "\Data.xls" & """;Extended Properties=""Excel 8.0;HDR=No"";")
ado.Execute "UPDATE [Sheet1$A1:A1] SET F1 = '" & Sheet1.[A1] & "'"
ado.Close


End Sub

Rất cám ơn mọi người
 
Hoàn toàn có thể nhập liệu sang file đang mở đó bạn.

Mã:
Sub NhapLieu()
    Dim Cn As Object, rst As Object
    Dim strData As String
    strPath = ThisWorkbook.Path
    Set Cn = CreateObject("ADODB.Connection")
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & strPath & _
            "\A.xls;Extended Properties=""Excel 8.0"";"
    Set rst = Cn.Execute("Insert into [Sheet1$] (Stt,Ten) select stt,ten from [" & strPath & "\B.xls].[Sheet1$]")
    
End Sub
Code trên tôi ghi dữ liệu từ file B.xls sang file A.xls bình thường, cho dù file A.xls có đang mở hay đóng.
Anh có thể giúp em sửa code trên để ứng dụng vào file của em được không? Code trên của anh là ghi tiếp dữ liệu vào vùng dữ liệu đã được ghi của file đích. có cách nào có thể update dữ liệu mới thôi không hoặc xóa hết dữ liệu cũ ở file đích để ghi dữ liệu lại từ file nguồn đến file đích không? Rất cám ơn sự giúp đỡ của anh
 
Upvote 0
Hoàn toàn có thể nhập liệu sang file đang mở đó bạn.

Mã:
Sub NhapLieu()
    Dim Cn As Object, rst As Object
    Dim strData As String
    strPath = ThisWorkbook.Path
    Set Cn = CreateObject("ADODB.Connection")
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & strPath & _
            "\A.xls;Extended Properties=""Excel 8.0"";"
    Set rst = Cn.Execute("Insert into [Sheet1$] (Stt,Ten) select stt,ten from [" & strPath & "\B.xls].[Sheet1$]")
    
End Sub

vậy chủ topic phải làm rõ vấn đề : người khác mở file này là mở ở đâu ? mở trên máy bạn hay mở file này từ 1 máy khác trong mạng LAN . nếu chính bạn mở file A.xls trên máy bạn thì chả có gì để nói . Nếu là người khác mở file A.xls lên qua mạng LAN thì code trên hoàn toàn không có tác dụng . khi đó code sẽ thực hiện mở file A.xls dưới dạng READ -ONLY và chép dữ liệu vào file A.xls dưới dạng READ-ONLY dĩ nhiên chỉ để cho vui chứ không SAVE được
 
Upvote 0
Thầy Hai Lúa Miền Tây ơi, sao em tải file của Thầy về, mở file B.Xls lên , gỏ dữ liệu vào rồi nhấn nút ghi qua file A.Xls mà bị lỗi ngay dòng:
Set rst = Cn.Execute("Insert into [Sheet1$] (Stt,Ten) select stt,ten from [" & strPath & "\B.xls].[Sheet1$]")
 
Upvote 0
Thầy Hai Lúa Miền Tây ơi, sao em tải file của Thầy về, mở file B.Xls lên , gỏ dữ liệu vào rồi nhấn nút ghi qua file A.Xls mà bị lỗi ngay dòng:
Set rst = Cn.Execute("Insert into [Sheet1$] (Stt,Ten) select stt,ten from [" & strPath & "\B.xls].[Sheet1$]")
Nó báo lỗi sao vậy bạn?
 
Upvote 0
Thầy Hai Lúa Miền Tây ơi, sao em tải file của Thầy về, mở file B.Xls lên , gỏ dữ liệu vào rồi nhấn nút ghi qua file A.Xls mà bị lỗi ngay dòng:
Set rst = Cn.Execute("Insert into [Sheet1$] (Stt,Ten) select stt,ten from [" & strPath & "\B.xls].[Sheet1$]")

Chắc là phải lưu 2 file vào cùng thư mục
tôi làm vậy nó chạy ngon, có đều mỗi lần cập nó chép hết
ADO thấy hay nhưng khó nhắm thật....hihihih
 
Upvote 0
Upvote 0
Anh có thể giúp em với yêu cầu update chứ không ghi tiếp được không?

Tôi lấy cột Stt làm điều kiện cập nhật, nếu dữ liệu trong file A.xls không có trong file B.xls thì tôi lấy dữ liệu file B.xls đưa vào và đồng thời cập nhật mới dữ liệu.

Mã:
Sub Update_HLMT()

    Dim Cn As Object
    Dim strData As String
    strPath = ThisWorkbook.Path
    Set Cn = CreateObject("ADODB.Connection")
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & strPath & _
            "\A.xls;Extended Properties=""Excel 8.0"";"
    Cn.Execute "UPDATE [Sheet1$] a " _
        & "Right Join " _
        & "[Excel 8.0;DATABASE=" & ThisWorkbook.FullName & "].[Sheet1$] b " _
        & "ON a.Stt=b.Stt " _
        & "SET a.Stt=b.Stt,a.Ten=b.Ten"
        
End Sub
 

File đính kèm

Upvote 0
Tôi lấy cột Stt làm điều kiện cập nhật, nếu dữ liệu trong file A.xls không có trong file B.xls thì tôi lấy dữ liệu file B.xls đưa vào và đồng thời cập nhật mới dữ liệu.

Mã:
Sub Update_HLMT()

    Dim Cn As Object
    Dim strData As String
    strPath = ThisWorkbook.Path
    Set Cn = CreateObject("ADODB.Connection")
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & strPath & _
            "\A.xls;Extended Properties=""Excel 8.0"";"
    Cn.Execute "UPDATE [Sheet1$] a " _
        & "Right Join " _
        & "[Excel 8.0;DATABASE=" & ThisWorkbook.FullName & "].[Sheet1$] b " _
        & "ON a.Stt=b.Stt " _
        & "SET a.Stt=b.Stt,a.Ten=b.Ten"
        
End Sub
Em rất cám ơn anh " Hai Lúa Miền Tây". Quả thực File của anh rất hay tuy nhiên vẫn còn 1 chút bất cập như sau:
- Ví dụ; Khi File B ghi dữ liệu sang file A từ cột STT có các dòng giá tri 1->6, nhưng nếu sai sót xóa ô có chứa giá trị 3 ở cột stt file B đi thi khi ghi lại dữ liệu sang file A. Cột STT dòng có giá trị 3 đấy không update
- Khi clear giá trị tại file A đi thi cập nhật lại dữ liệu từ file B sang sẽ ghi dữ liệu xuống dưới các ô vừa bị clear ( vì vậy có nhiều ô trống ). Chỉ khi delete dòng đi mới ghi dữ liệu ở bên dưới dòng tiêu đề
 
Upvote 0
Em rất cám ơn anh " Hai Lúa Miền Tây". Quả thực File của anh rất hay tuy nhiên vẫn còn 1 chút bất cập như sau:
- Ví dụ; Khi File B ghi dữ liệu sang file A từ cột STT có các dòng giá tri 1->6, nhưng nếu sai sót xóa ô có chứa giá trị 3 ở cột stt file B đi thi khi ghi lại dữ liệu sang file A. Cột STT dòng có giá trị 3 đấy không update
- Khi clear giá trị tại file A đi thi cập nhật lại dữ liệu từ file B sang sẽ ghi dữ liệu xuống dưới các ô vừa bị clear ( vì vậy có nhiều ô trống ). Chỉ khi delete dòng đi mới ghi dữ liệu ở bên dưới dòng tiêu đề
Đó là vấn đề của bạn, chuyện dữ liệu xóa hay gì gì đó thì bạn phải chịu thôi chứ. Tôi chỉ làm ví dụ thế thôi. Như tôi đã nói là cột STT là điều kiện để cập nhật, nếu không có nó thì nó đâu biết lấy cái nào để cập nhật.
 
Upvote 0
Đó là vấn đề của bạn, chuyện dữ liệu xóa hay gì gì đó thì bạn phải chịu thôi chứ. Tôi chỉ làm ví dụ thế thôi. Như tôi đã nói là cột STT là điều kiện để cập nhật, nếu không có nó thì nó đâu biết lấy cái nào để cập nhật.
Em xin phép hỏi anh thêm câu nữa. Có cách nào khi ghi dữ liệu từ file B sang file A thi xóa toàn bộ dữ liệu trước đây đã ghi ở file A để ghi dữ liệu mới lại từ đầu đươc không?
 
Upvote 0
vậy chủ topic phải làm rõ vấn đề : người khác mở file này là mở ở đâu ? mở trên máy bạn hay mở file này từ 1 máy khác trong mạng LAN . nếu chính bạn mở file A.xls trên máy bạn thì chả có gì để nói . Nếu là người khác mở file A.xls lên qua mạng LAN thì code trên hoàn toàn không có tác dụng . khi đó code sẽ thực hiện mở file A.xls dưới dạng READ -ONLY và chép dữ liệu vào file A.xls dưới dạng READ-ONLY dĩ nhiên chỉ để cho vui chứ không SAVE được
Đã test thử trên hai máy dùng mạng Lan. Đúng như lời bạn nói là không thể ghi dữ liệu khi máy kia đang mở file. Chỉ dùng được khi mở trên cùng 1 máy
 
Upvote 0
Cách gì vạy bạn? K phải là cách share workbook dau nhe-0-/.
 
Upvote 0
Tại sao khi share workbook rồi mà vẫn không dung ADO để ghi vào 1 file mở trên 2 máy được nhỉ
 
Upvote 0
Tại sao khi share workbook rồi mà vẫn không dung ADO để ghi vào 1 file mở trên 2 máy được nhỉ
Bạn đừng tìm hiểu chi cho thêm mất thời gian, khuyết điểm của nó ở chổ đó. Bạn nên lưu CSDL vào database khác ngoại trừ Excel nhé.
 
Upvote 0
Bạn đừng tìm hiểu chi cho thêm mất thời gian, khuyết điểm của nó ở chổ đó. Bạn nên lưu CSDL vào database khác ngoại trừ Excel nhé.
Kiến thức của em còn nhiều hạn chế anh có thể giải thích chi tiết hơn hoặc có đường link hướng dẫn gì được không?
 
Upvote 0
Web KT

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

Back
Top Bottom