Giúp sửa code cập nhật dữ liệu từ file excel này sang file excel khác? (1 người xem)

Liên hệ QC

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

thanhtung1088

Thành viên mới
Tham gia
23/8/13
Bài viết
20
Được thích
2
Mình đã tạo một chủ đề nhờ viết code về vấn đề này nhưng không ai trả lời.
Vì vậy mình đã cố gắng tìm hiểu trên chính diễn đàn này để viết code theo yêu cầu công việc.
Mình cũng đã viết được code đáp ứng được 1/2 yêu cầu, phần còn lại vẫn chạy sai,đó là phần copy dữ liệu từ cột Step, SW,DC ở file Du_lieu.xls qua các cột có tên tương ứng trong file Bieu_mau.xls, sao cho được như file Ban_bao_cao.xls(file này mình làm bằng tay, rất mất thời gian).
Code nằm trong file Du_lieu.xls.
Mong các Thầy và các bạn giúp đỡ cho.
Xin cảm ơn.
 

File đính kèm

Mình đã tạo một chủ đề nhờ viết code về vấn đề này nhưng không ai trả lời.
Vì vậy mình đã cố gắng tìm hiểu trên chính diễn đàn này để viết code theo yêu cầu công việc.
Mình cũng đã viết được code đáp ứng được 1/2 yêu cầu, phần còn lại vẫn chạy sai,đó là phần copy dữ liệu từ cột Step, SW,DC ở file Du_lieu.xls qua các cột có tên tương ứng trong file Bieu_mau.xls, sao cho được như file Ban_bao_cao.xls(file này mình làm bằng tay, rất mất thời gian).
Code nằm trong file Du_lieu.xls.
Mong các Thầy và các bạn giúp đỡ cho.
Xin cảm ơn.
Có các điểm cần làm rõ là:
  1. File BieuMau và BaoCao có các tên cột khác nhau?
  2. Dòng tô màu vàng là địa điểm 2 là ý nghĩa gì.
  3. Trong bảng báo cáo có cột NDPX và NDPX2 sẽ được lấy chung 1 cột dữ liệu DC của file dulieu?
  4. NG_DAU và NG_CUOI được lấy từ cell D8 và D9 của file dulieu? Nhưng tại sao trong file BaoCao có ngày tăng lên 1 theo từng dòng dữ liệu?
 
Upvote 0
Đây là code của mình(mình ko biết cách đặt trong khung PHP code)
Mã:
Sub capnhatdata()
    Dim i, j, n, k, tong As Integer
    Dim wb As Workbook
    Dim wb2 As Workbook
    Dim vFile As Variant
    Set wb = ActiveWorkbook
    
        ' xac dinh so dong du lieu cua bang Du_lieu thong qua bien tong
        tong = 13
        n = 100
        For i = 13 To n
            If wb.Worksheets("Sheet3").Cells(i, 2) <> 0 Then
            tong = tong + 1
            End If
        Next
        'mo file Bieu_mau de cap nhat du lieu
        
    vFile = Application.GetOpenFilename("Excel-files,*.xls", _
        1, "Select One File To Open", , False)
    If TypeName(vFile) = "Boolean" Then Exit Sub
        Workbooks.Open vFile
        Set wb2 = ActiveWorkbook
        ' vong lap cap nhat du lieu tu bang Du_lieu qua Bieu_mau
        
        n = 100
            For k = 13 To tong
                If wb.Worksheets("Sheet3").Cells(k, 2) <> 0 Then
                For j = 3 To (tong - 10)
                    wb2.Worksheets("Form").Cells(j, 6) = wb.Worksheets("Sheet3").Cells(k, 3)
                    wb2.Worksheets("Form").Cells(j, 10) = wb.Worksheets("Sheet3").Cells(k, 4)
                    wb2.Worksheets("Form").Cells(j, 11) = wb.Worksheets("Sheet3").Cells(k, 5)
                    
                    wb2.Worksheets("Form").Cells(j, 1) = wb.Worksheets("Sheet3").Cells(1, 4)
                    wb2.Worksheets("Form").Cells(j, 2) = wb.Worksheets("Sheet3").Cells(2, 4)
                    
                    
                Next
                End If
            Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Có các điểm cần làm rõ là:
  1. File BieuMau và BaoCao có các tên cột khác nhau?
  2. Dòng tô màu vàng là địa điểm 2 là ý nghĩa gì.
  3. Trong bảng báo cáo có cột NDPX và NDPX2 sẽ được lấy chung 1 cột dữ liệu DC của file dulieu?
  4. NG_DAU và NG_CUOI được lấy từ cell D8 và D9 của file dulieu? Nhưng tại sao trong file BaoCao có ngày tăng lên 1 theo từng dòng dữ liệu?

1. Là do file Baocao mình ẩn đi một số cột.
2.dòng tô màu vàng này (và toàn bộ dòng 2 trong Bieumau ko quan trọng), quan trọng là tên ở dòng 1 Bieumau giống với Dulieu.
3. NDPX và NDPX2 sẽ lấy chung dữ liệu từ DC.
4. NG_DAU Và NG_CUOI là giống nhau cho tất cả các dòng trong file Baocao (do mình kéo xuống nên nó thay đổi)

Mình muốn làm sao copy được 3 cột Step,SW,DC trong DuLieu qua BieuMau thôi, phần còn lại mình thực hiện được rồi.
 
Upvote 0
Bạn chạy thử code sau:

[GPECODE=sql]Sub ChuyenDL()
Dim lsSQL As String, Cnn As Object
Set Cnn = CreateObject("ADODB.Connection")
With Cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\Bieu_mau.xls" & _
";Extended Properties=""Excel 8.0;HDR=Yes;"";"
.Open
End With
lsSQL = "INSERT INTO [Form$] SELECT *, [DC] as [NDPX2],[DC], '" & _
[D1] & "' as [Dia diem], '" & [D2] & "' as [STT], '" & [D3] & "' as [Device], '" & _
[D4] & "' as [KD], '" & [D5] & "' as [VD], '" & [D6] & "' as [Unit], '" & _
[D7] & "' as [CT], '" & [D8].Value & "' as [NG_DAU], '" & _
[D9].Value & "' as [NG_CUOI] " & _
"FROM [EXCEL 8.0;Database=" & ThisWorkbook.FullName & ";HDR=Yes].[Sheet3$C12:E45];"
Cnn.Execute lsSQL
Cnn.Close: Set Cnn = Nothing

End Sub

[/GPECODE]
Code sẽ ghi nối tiếp dữ liệu phía bên dưới của Sheet Form trong file Bieu_Mau
 
Upvote 0
Rất cảm ơn bạn đã nhiệt tình giúp đỡ, code của bạn chạy đúng yêu cầu rồi, nhưng "trình độ" VBA của mình chưa đủ để hiểu code của bạn viết. Mình sẽ tìm hiểu kĩ đoạn code của bạn sau.
Bạn có thể giúp mình tìm ra chỗ sai trong đoạn code cũ của mình ko? Mình Thấy mấu chốt vấn đề nằm ở chỗ vòng lặp for:
Mã:
[COLOR=#000000]n = 100[/COLOR]
[COLOR=#000000]For k = 13 To tong[/COLOR]
[COLOR=#000000]If wb.Worksheets("Sheet3").Cells(k, 2) <> 0 Then[/COLOR]
[COLOR=#000000]For j = 3 To (tong - 13)[/COLOR]
[COLOR=#000000]wb2.Worksheets("Form").Cells(j, 6) = wb.Worksheets("Sheet3").Cells(k, 3)
Next
End If
Next[/COLOR]
Mình dùng lệnh gán dữ liệu, bắt đầu là dòng 3(biến j), cột 6 (cột Step) của Bieumau, sẽ bằng với dòng thứ 13 (biến k), cột 3 (cột Step) của Dulieu.
Mình vẫn ko thể tìm ra chỗ sai của đoạn code này?
Mong bạn và mọi người giúp đỡ cho.
 
Lần chỉnh sửa cuối:
Upvote 0
Rất cảm ơn bạn đã nhiệt tình giúp đỡ, code của bạn chạy đúng yêu cầu rồi, nhưng "trình độ" VBA của mình chưa đủ để hiểu code của bạn viết. Mình sẽ tìm hiểu kĩ đoạn code của bạn sau.
Bạn có thể giúp mình tìm ra chỗ sai trong đoạn code cũ của mình ko? Mình Thấy mấu chốt vấn đề nằm ở chỗ vòng lặp for:
Mã:
[COLOR=#000000]n = 100[/COLOR]
[COLOR=#000000]For k = 13 To tong[/COLOR]
[COLOR=#000000]If wb.Worksheets("Sheet3").Cells(k, 2) <> 0 Then[/COLOR]
[COLOR=#000000]For j = 3 To (tong - 13)[/COLOR]
[COLOR=#000000]wb2.Worksheets("Form").Cells(j, 6) = wb.Worksheets("Sheet3").Cells(k, 3)
Next
End If
Next[/COLOR]
Mình dùng lệnh gán dữ liệu, bắt đầu là dòng 3(biến j), cột 6 (cột Step) của Bieumau, sẽ bằng với dòng thứ 13 (biến k), cột 3 (cột Step) của Dulieu.
Mình vẫn ko thể tìm ra chỗ sai của đoạn code này?
Mong bạn và mọi người giúp đỡ cho.

Chỉnh theo code của bạn:
Mã:
Sub Button1_Click()
    Dim j, tong As Integer
    Dim wb As Workbook
    Dim wb2 As Workbook
    Dim vFile As Variant
    Set wb = ActiveWorkbook
   ' xac dinh so dong du lieu cua bang Du_lieu thong qua bien tong
        tong = 100
      '  n = 100
      '  For i = 13 To n
      '      If wb.Worksheets("Sheet3").Cells(i, 2) <> 0 Then
      '      tong = tong + 1
      '      End If
      '  Next
        'mo file Bieu_mau de cap nhat du lieu
    vFile = Application.GetOpenFilename("Excel-files,*.xls", _
        1, "Select One File To Open", , False)
    If TypeName(vFile) = "Boolean" Then Exit Sub
    Workbooks.Open vFile
        Set wb2 = ActiveWorkbook
       ' vong lap cap nhat du lieu tu bang Du_lieu qua Bieu_mau
       ' n = 100
       '     For k = 13 To tong
                For j = 3 To (tong - 12)
                    If wb.Worksheets("Sheet3").Cells(j + 10, 2) <> 0 Then
                        With wb2.Worksheets("Form")
                            .Cells(j, 6) = wb.Worksheets("Sheet3").Cells(j + 10, 3)
                            .Cells(j, 10) = wb.Worksheets("Sheet3").Cells(j + 10, 4)
                            .Cells(j, 11) = wb.Worksheets("Sheet3").Cells(j + 10, 5)
                            .Cells(j, 1) = wb.Worksheets("Sheet3").Cells(1, 4)
                            .Cells(j, 2) = wb.Worksheets("Sheet3").Cells(2, 4)
                        End With
                    End If
                Next
           ' Next

End Sub
 
Upvote 0
Chỉnh theo code của bạn:
Mã:
Sub Button1_Click()
    Dim j, tong As Integer
    Dim wb As Workbook
    Dim wb2 As Workbook
    Dim vFile As Variant
    Set wb = ActiveWorkbook
   ' xac dinh so dong du lieu cua bang Du_lieu thong qua bien tong
        tong = 100
      '  n = 100
      '  For i = 13 To n
      '      If wb.Worksheets("Sheet3").Cells(i, 2) <> 0 Then
      '      tong = tong + 1
      '      End If
      '  Next
        'mo file Bieu_mau de cap nhat du lieu
    vFile = Application.GetOpenFilename("Excel-files,*.xls", _
        1, "Select One File To Open", , False)
    If TypeName(vFile) = "Boolean" Then Exit Sub
    Workbooks.Open vFile
        Set wb2 = ActiveWorkbook
       ' vong lap cap nhat du lieu tu bang Du_lieu qua Bieu_mau
       ' n = 100
       '     For k = 13 To tong
                For j = 3 To (tong - 12)
                    If wb.Worksheets("Sheet3").Cells(j + 10, 2) <> 0 Then
                        With wb2.Worksheets("Form")
                            .Cells(j, 6) = wb.Worksheets("Sheet3").Cells(j + 10, 3)
                            .Cells(j, 10) = wb.Worksheets("Sheet3").Cells(j + 10, 4)
                            .Cells(j, 11) = wb.Worksheets("Sheet3").Cells(j + 10, 5)
                            .Cells(j, 1) = wb.Worksheets("Sheet3").Cells(1, 4)
                            .Cells(j, 2) = wb.Worksheets("Sheet3").Cells(2, 4)
                        End With
                    End If
                Next
           ' Next

End Sub


Code chạy OK rồi bạn à, cảm ơn bạn nhiều.
 
Upvote 0

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

Back
Top Bottom