Ghi Dữ Liệu Vào File Đóng Bằng ADO

Liên hệ QC

Kiều Mạnh

I don't program, I beat code into submission!!!
Tham gia
9/6/12
Bài viết
5,421
Được thích
4,032
Giới tính
Nam
Mình có viết một chương trình Bán hàng...sử dụng VBA để ghi dữ liệu từ file chuơngTrinh.xlsb vào File Data.xlsb hiện tại sử dụng tốt ...
Nhưng khi dữ liệu File Data càng lớn thì thấy nó hơi chậm lại...vì vậy mình muốn chuyển qua sử dụng ADO với code có chức năng tương tự nhưng kẹt chưa làm được ...Vậy úp lên nhờ các Bạn trợ giúp

1/ vùng dữ liệu cần ghi từ File chuongTrinh là [A6:J82]

2/ điều kiện ghi là từ [C6:C82] nếu Cells nào có dữ liệu thì lọc ghi theo dòng đó (khó khúc này ADO là mình Tịt...Nếu ghi nguyên vùng thì OK)

3/ Ghi vào Sheets("Data_Ban")File Data.xlsb nối tiếp xuống dưới tương tự như Code VBA mình viết....sau khi ghi xong thì chay Sub Auto_Open trong File Data.xlsb
Xin cảm ơn các Bạn đã trợ giúp...
Code VBA
PHP:
Public Sub LuuData_Ban()
Application.ScreenUpdating = False
Dim Nguon(), Kq(), i&, j&, k&
Nguon = ActiveSheet.Range("A6:J82").Value
ReDim Kq(1 To UBound(Nguon, 1), 1 To UBound(Nguon, 2))
For i = 1 To UBound(Nguon, 1)
    If Nguon(i, 3) <> "" Then 
       k = k + 1
        For j = 1 To UBound(Nguon, 2)
            Kq(k, j) = Nguon(i, j)
        Next
    End If
Next
With Workbooks.Open(ThisWorkbook.Path & "\Data.xlsb", 0)
    .Sheets("Data_Ban").Range("A65536").End(3)(2).Resize(k, UBound(Nguon, 2)) = Kq
    .RunAutoMacros (xlAutoOpen) ''Chay Sub Auto_Open Trong File Data
    .Close True
End With
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • Hoi Bai.rar
    38.8 KB · Đọc: 71
Vậy phải coi dữ liệu của bạn thế nào đã, thường thì ta dùng hàm Val
Mình thấy xài Hàm sau của Bạn thấy cũng được .... có hay hơn xài hàm Val không..
PHP:
Function TransArr(Sarr As Variant) As Variant
    Dim cllX As Long, cllY As Long, tmpX As Long, tmpY As Long, tmpArr As Variant
    On Error Resume Next
    tmpX = UBound(Sarr, 2):    tmpY = UBound(Sarr, 1)
    ReDim tmpArr(1 To tmpX + 1, 1 To tmpY + 1)
    For cllX = 0 To tmpX
        For cllY = 0 To tmpY
            tmpArr(cllX + 1, cllY + 1) = Sarr(cllY, cllX)
        Next cllY
    Next cllX
    TransArr = tmpArr
End Function
 
Upvote 0
Mình thấy xài Hàm sau của Bạn thấy cũng được .... có hay hơn xài hàm Val không..
PHP:
Function TransArr(Sarr As Variant) As Variant
    Dim cllX As Long, cllY As Long, tmpX As Long, tmpY As Long, tmpArr As Variant
    On Error Resume Next
    tmpX = UBound(Sarr, 2):    tmpY = UBound(Sarr, 1)
    ReDim tmpArr(1 To tmpX + 1, 1 To tmpY + 1)
    For cllX = 0 To tmpX
        For cllY = 0 To tmpY
            tmpArr(cllX + 1, cllY + 1) = Sarr(cllY, cllX)
        Next cllY
    Next cllX
    TransArr = tmpArr
End Function

đã cố gắng suy nghĩ nhưng vẫn không hiểu Kiều Mạnh muốn làm gì . hic
 
Upvote 0
đã cố gắng suy nghĩ nhưng vẫn không hiểu Kiều Mạnh muốn làm gì . hic
Tại vì trước đây mình cũng mê ADO lắm ...Copy mấy Code trên GPE về chỉnh lại theo ý mình xài thấy ok....một ngày đẹp trời máy hỏng cài lại win ... vẫn code đó chạy thấy lỗi không cộng lại được (dữ liệu chuyên text) . khả năng mình chưa làm chủ được ADo ghét bỏ luôn...

sau này thử Hàm đó chuyển lấy dữ liệu Từ ADo lên Nguon = TransArr(RS.GetRows)thì xài OK...vậy đó
 
Upvote 0
Các bác cho hỏi với file DATA của bác Kieu Manh mà để trên máy chủ, còn các nhân viên thì sử dụng file Chuongtrinh trên các máy desktop (1 file data, nhiều file chương trình) thì việc ghi và xuất dữ liệu tới file Data này có được không, nhất là phương án ghi bằng ADO.?
 
Upvote 0
Các bác cho hỏi với file DATA của bác Kieu Manh mà để trên máy chủ, còn các nhân viên thì sử dụng file Chuongtrinh trên các máy desktop (1 file data, nhiều file chương trình) thì việc ghi và xuất dữ liệu tới file Data này có được không, nhất là phương án ghi bằng ADO.?
Nên chuyển sang database là access.
 
Upvote 0
Web KT
Back
Top Bottom