VBA kết nối excel không sử dụng "ADODB.Connection" (1 người xem)

Liên hệ QC

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

ngocuytk7

Thành viên mới
Tham gia
1/8/14
Bài viết
22
Được thích
1
Em xin chào mọi người trong diễn đàn.
Em có một file excel chạy VBA file này sẽ mở 1 file nên sao đó copy nội dụng vào file mới được tạo.
Em muốn không sử dụng "ADODB.Connection" mà vẫn đọc và copy được file thì code như thế nào ạ.
Xin mọi người cho em code ví dụ ạ.
Em xin cảm ơn mọi người.
 
Em xin chào mọi người trong diễn đàn.
Em có một file excel chạy VBA file này sẽ mở 1 file nên sao đó copy nội dụng vào file mới được tạo.
Em muốn không sử dụng "ADODB.Connection" mà vẫn đọc và copy được file thì code như thế nào ạ.
Xin mọi người cho em code ví dụ ạ.
Em xin cảm ơn mọi người.
File mở rồi thì dùng Ado connection làm chi nữa. Cứ copy trực tiếp vào thôi.
 
Upvote 0
Em xin chào mọi người trong diễn đàn.
Em có một file excel chạy VBA file này sẽ mở 1 file nên sao đó copy nội dụng vào file mới được tạo.
Em muốn không sử dụng "ADODB.Connection" mà vẫn đọc và copy được file thì code như thế nào ạ.
Xin mọi người cho em code ví dụ ạ.
Em xin cảm ơn mọi người.
Không dùng ADO thì thử tham khảo code của anh QuangHai ở bài #7 này xem sao:
http://www.giaiphapexcel.com/forum/showthread.php?95171-import-sheet-từ-2-file-khác-nhau
 
Upvote 0
File mở rồi thì dùng Ado connection làm chi nữa. Cứ copy trực tiếp vào thôi.

Anh đây rồi.hihi.
Anh ơi Lần trước anh kết nối cho em sử dụng ADO ý ạ.
Giờ em không muốn sử dụng kết nối này mà mở file bằng worksheet được không anh.
Em cảm ơn anh nhiều ạ.
Dưới đây là file đính kèm của em ạ.

PHP:
 Function GetExcelConnection(ByVal Path As String, Optional ByVal Header As Boolean = True)    Dim StrConn As String, ObjConn As Object, Pro As String, Ext As String    Set ObjConn = CreateObject("ADODB.Connection")    If Application.Version < 12 Then        Pro = "Provider=Microsoft.JET.OLEDB.4.0;"        Ext = ";Extended Properties=""Excel 8.0;"    Else        Pro = "Provider=Microsoft.ACE.OLEDB.12.0;"        Ext = ";Extended Properties=""Excel 12.0;"    End If    StrConn = Pro & "Data Source=" & Path & Ext & "HDR=" & IIf(Header, "Yes", "No") & ";IMEX=1"";"    ObjConn.Open StrConn    Set GetExcelConnection = ObjConnEnd Function

PHP:
For i = 0 To UBound(Files) 
       n = 0: Erase title      
       Set ObjConn = GetExcelConnection(strPath & "\" & Files(i), 1)        
       strRequest = "SELECT * FROM [" + strWordsheet + "$A1:AI10000]"        
       objRS.Open strRequest, ObjConn, 3, 1               
       For Each It In objRS.Fields           
             n = n + 1          
             ReDim Preserve title(1 To n)            
             title(n) = It.Name        Next        
       ActiveWorkbook.Sheets("Sheet" & i + 2).[A1].Resize(, n) = title      
      ActiveWorkbook.Sheets("Sheet" & i + 2).[A2].CopyFromRecordset objRS        
ObjConn.Close    Next
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh đây rồi.hihi.
Anh ơi Lần trước anh kết nối cho em sử dụng ADO ý ạ.
Giờ em không muốn sử dụng kết nối này mà mở file bằng worksheet được không anh.
Em cảm ơn anh nhiều ạ.
Khi 1 dòng nước đã phiêu lưu 1000 bến lạ thì có bao giờ trở lại nhịp cầu đã lỡ 1 lần qua...
Chạy thôi. Nhìn mấy cái file ghê quá.
 
Upvote 0
Ghê gì anh.
Anh xem giúp em đi hay gợi ý em cũng được.hihi
Em cảm ơn anh nhiều ạ.
 
Upvote 0
hihi. 2 anh và mọi người xem giúp em với ạ,
2 anh vui tính thế.hihi.
Em đang không có cách nào.hihi
Em cảm ơn nhiều ạ.
 
Upvote 0
Em xin chào mọi người trong diễn đàn.
Em có một file excel chạy VBA file này sẽ mở 1 file nên sao đó copy nội dụng vào file mới được tạo.
Em muốn không sử dụng "ADODB.Connection" mà vẫn đọc và copy được file thì code như thế nào ạ.
Xin mọi người cho em code ví dụ ạ.
Em xin cảm ơn mọi người.

Tại sao lại không dùng ADO nữa,
và trong đó bạn up rất nhiều file, muốn sửa code file nào?
 
Upvote 0
Tại sao lại không dùng ADO nữa,
và trong đó bạn up rất nhiều file, muốn sửa code file nào?

Em muốn sửa file QS_merge trong đó có macro anh ạ.
Ở đó có kết nối bằng ADO em muốn sửa không dùng nó nữa.(Chuỗi kết nối ở cuối file)
Mong anh và mọi người giúp đỡ.
 
Upvote 0
Em muốn sửa file QS_merge trong đó có macro anh ạ.
Ở đó có kết nối bằng ADO em muốn sửa không dùng nó nữa.(Chuỗi kết nối ở cuối file)
Mong anh và mọi người giúp đỡ.

ADO kết nối cũng hợp lý mà, tôi chưa biết ADO đáng kể, nhưng lý do bạn bỏ ADO là ???, và các files chữ tàu hay nhật nhiều quá không biết bạn muốn merged cái gì , đọc code cũ thì quá sức
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
ADO kết nối cũng hợp lý mà, tôi chưa biết ADO đáng kể, nhưng lý do bạn bỏ ADO là ???, và các files chữ tàu hay nhật nhiều quá không biết bạn muốn merged cái gì , đọc code cũ thì quá sức


Anh ơi. Đại khái lần trước code em được anh Quang Hải viết cho như sau.
Em không muốn dùng ADO nữa ạ ví ông quan lý em bảo dùng cái ADO này nó lấy cả dữ liệu trống bắt em dùng cái khác.huhu.
Anh và mọi người xem giúp em mới ạ.
Đây là bài lần trước của em ạ
http://www.giaiphapexcel.com/forum/showthread.php?95582-Xử-lý-dữ-liệu-excel-bằng-lập-trình-VBA

Em cảm ơn ạ.
PHP:
Sub Main()
Dim ObjConn As Object, RS As Object, Files
Dim StrRequest As String, Path As String
Dim I as Long, It, n as Long, tieude()
Path = ThisWorkbook.Path
Files = Array("QS_MAIL_HISTORY_SMS.xls", "QS_MAIL_HISTORY_EMAIL.xls")
Set RS = CreateObject("ADODB.Recordset")
Workbooks.Add
    For I = 0 To UBound(Files)
        Set ObjConn = GetExcelConnection(Path & "\" & Files(I), 1)
        StrRequest = "SELECT * FROM [Worksheet$A1:AE10000]"
        RS.Open StrRequest, ObjConn, 3, 1
        For Each It In RS.Fields
            n = n + 1
            ReDim Preserve tieude(1 To n)
            tieude(n) = It.Name
        Next
        ActiveWorkbook.Sheets("Sheet" & I + 1).[A1].Resize(, n) = tieude
        ActiveWorkbook.Sheets("Sheet" & I + 1).[A2].CopyFromRecordset RS
        ObjConn.Close
        n = 0: Erase tieude
    Next
    Set RS = Nothing
End Sub
Function GetExcelConnection(ByVal Path As String, Optional ByVal Header As Boolean = True)
    Dim StrConn As String, ObjConn As Object, Pro As String, Ext As String
    Set ObjConn = CreateObject("ADODB.Connection")
    If Application.Version < 12 Then
        Pro = "Provider=Microsoft.JET.OLEDB.4.0;"
        Ext = ";Extended Properties=""Excel 8.0;"
    Else
        Pro = "Provider=Microsoft.ACE.OLEDB.12.0;"
        Ext = ";Extended Properties=""Excel 12.0;"
    End If
    StrConn = Pro & "Data Source=" & Path & Ext & "HDR=" & IIf(Header, "Yes", "No") & ";IMEX=1"";"
    ObjConn.Open StrConn
    Set GetExcelConnection = ObjConn
End Function
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Anh ơi. Đại khái lần trước code em được anh Quang Hải viết cho như sau.
Em không muốn dùng ADO nữa ạ ví ông quan lý em bảo dùng cái ADO này nó lấy cả dữ liệu trống bắt em dùng cái khác.huhu.
Mình rất nhiệt tình trong việc giúp đở mọi người, nhưng nói thật từ bài số 4 là mình có cảm giác không ổn rồi nên đã lên tiếng là xin chạy trong bài số 5 rồi. Hy vọng bạn có đáp án khác.
 
Upvote 0
Mình rất nhiệt tình trong việc giúp đở mọi người, nhưng nói thật từ bài số 4 là mình có cảm giác không ổn rồi nên đã lên tiếng là xin chạy trong bài số 5 rồi. Hy vọng bạn có đáp án khác.

hihi. Anh chinh chiến bao nhiêu năm rồi mà.hihi.
Thay không sử dụng ADO nữa mà không được à anh.hihi.
Anh và mọi người không cứu em thì ai cứu em.hihi.
Em tìm mà chưa biết làm ntn.huhu.
 
Upvote 0
hihi. Anh chinh chiến bao nhiêu năm rồi mà.hihi.
Thay không sử dụng ADO nữa mà không được à anh.hihi.
Anh và mọi người không cứu em thì ai cứu em.hihi.
Em tìm mà chưa biết làm ntn.huhu.
Không dùng Ado thì càng đơn giản hơn nhiều lần, nhưng tại chưa hứng làm thôi. Vì cái cảm giác không thoải mái vẫn còn phảng phất.

********
Vấn đề không phải là dùng ADO hay DOA hay OAD mà là phần xử lý để cho ra kết quả cuối cùng. Và hiện tại chẳng ai biết kết quả cuối cùng của bạn là rồng hay rắn
 
Lần chỉnh sửa cuối:
Upvote 0
Không dùng Ado thì càng đơn giản hơn nhiều lần, nhưng tại chưa hứng làm thôi. Vì cái cảm giác không thoải mái vẫn còn phảng phất.

********
Vấn đề không phải là dùng ADO hay DOA hay OAD mà là phần xử lý để cho ra kết quả cuối cùng. Và hiện tại chẳng ai biết kết quả cuối cùng của bạn là rồng hay rắn
Anh hãy xua tan cái không thoải mái đi anh.hihi
Anh Quang Hải ơi em gửi anh cái file lần trước anh làm cho em ạ.hihi
Tư tưởng và kết quả vẫn như lần trước nhưng sửa không dùng ADO ạ.hihi
(Kết quả vẫn là tạo ra một file tổng hợp, file này sẽ thông báo tình trạng đã đọc tin hay chưa)
Anh xem giúp em anh nha.

Yêu cầu lần trước ạ.
- Em có 2 file excel trong 1 folder em muốn tạo ra một file excel mới.
File đó có Sheet1 chứa File excel 1, Sheet2 chứa File excel 2.
- Sheet3 em muốn tổng hợp dữ liệu từ 2 file (hoặc 2 Sheet đã được copy sang).
TH1. Nếu Trạng thái là đã đọc thì kết quả là đã đọc (Đã đọc + Chưa đoc= Đã đọc) và có cột mới báo OK.
TH2. Nếu trạng thái là chưa đọc thì kết quả là chưa đọc và có cột mới là NOT
- File chứa code VBA là file riêng. Nó chỉ cần có 1 nút buttun để ấn chạy + Code nữa.hihi

http://www.giaiphapexcel.com/forum/showthread.php?95582-Xử-lý-dữ-liệu-excel-bằng-lập-trình-VBA
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh hãy xua tan cái không thoải mái đi anh.hihi
Anh Quang Hải ơi em gửi anh cái file lần trước anh làm cho em ạ.hihi
Tư tưởng và kết quả vẫn như lần trước nhưng sửa không dùng ADO ạ.hihi
(Kết quả vẫn là tạo ra một file tổng hợp, file này sẽ thông báo tình trạng đã đọc tin hay chưa)
Anh xem giúp em anh nha.

Yêu cầu lần trước ạ.
- Em có 2 file excel trong 1 folder em muốn tạo ra một file excel mới.
File đó có Sheet1 chứa File excel 1, Sheet2 chứa File excel 2.
- Sheet3 em muốn tổng hợp dữ liệu từ 2 file (hoặc 2 Sheet đã được copy sang).
TH1. Nếu Trạng thái là đã đọc thì kết quả là đã đọc (Đã đọc + Chưa đoc= Đã đọc) và có cột mới báo OK.
TH2. Nếu trạng thái là chưa đọc thì kết quả là chưa đọc và có cột mới là NOT
- File chứa code VBA là file riêng. Nó chỉ cần có 1 nút buttun để ấn chạy + Code nữa.hihi

http://www.giaiphapexcel.com/forum/showthread.php?95582-Xử-lý-dữ-liệu-excel-bằng-lập-trình-VBA
1. Tạo 1 file excel mới, copy code này cho vào 1 module.
2. Vẽ cái nút rồi gán Sub GetData vào
3. Lưu file này trong thư mục có chứa 2 cái file quỷ kia.
4. Bấm cái nút.
Chú ý là chưa xử lý cái vụ NOT hay YES vì chưa thích. Bạn có thể tham khảo cách xử lý của file lần trước.
Mình chỉ giúp bạn phần khó thôi. Xử lý phần còn lại dễ quá nên lười.
PHP:
Sub GetData()
Dim FilesToOpen(), i As Long, FinalWB As Workbook
FilesToOpen = ListAllFileName(ThisWorkbook.Path)
Set FinalWB = Workbooks.Add
For i = 1 To UBound(FilesToOpen)
   With Workbooks.Open(FilesToOpen(i))
      With .ActiveSheet
         .[A1:AE1].Copy FinalWB.Sheets("Sheet3").[A1]
         With .UsedRange
            .Copy FinalWB.Sheets("Sheet" & i).[A1]
            .Offset(1).Copy FinalWB.Sheets("Sheet3").[A65536].End(3)(2)
         End With
      End With
      .Close False
   End With
Next
End Sub
PHP:
Function ListAllFileName(Path)
Dim ObjFSO As Object, ObjFile As Object, Sarr(), i As Long
Set ObjFSO = CreateObject("Scripting.FileSystemObject")
   For Each ObjFile In ObjFSO.Getfolder(Path).Files
      If ObjFSO.GetExtensionName(ObjFile.Name) Like "xls*" Then
         If Left(ObjFile.Name, 2) <> "~$" Then
            If ObjFile.Name <> ThisWorkbook.Name Then
               i = i + 1
               ReDim Preserve Sarr(1 To i)
               Sarr(i) = ObjFSO.GetAbsolutePathname(ObjFile)
            End If
         End If
      End If
   Next
ListAllFileName = Sarr
End Function
PS: Đây là 1 tình huống ứng dụng kiến thức tại bài viết này.

http://www.giaiphapexcel.com/forum/...-quan-về-FileSystemObject&p=600458#post600458
 
Lần chỉnh sửa cuối:
Upvote 0
Anh ơi. Đại khái lần trước code em được anh Quang Hải viết cho như sau.
Em không muốn dùng ADO nữa ạ ví ông quan lý em bảo dùng cái ADO này nó lấy cả dữ liệu trống bắt em dùng cái khác.huhu.
Anh và mọi người xem giúp em mới ạ.
Đây là bài lần trước của em ạ
http://www.giaiphapexcel.com/forum/showthread.php?95582-Xử-lý-dữ-liệu-excel-bằng-lập-trình-VBA

Em cảm ơn ạ.

thế này cho nông văn dền, thật đơn sơ, bạn có thể sửa lại được theo code của bạn

PHP:
    Set FilesSel = Application.FileDialog(msoFileDialogFilePicker)
    With FilesSel
        .InitialFileName = strPath & "\" & strSeachFileName
        .AllowMultiSelect = True
        .Filters.Add "Microsoft Excel Files", "*.xls; *.xlsx; *.xlsm"
        If .Show <> -1 Then MsgBox "Khong co files nao duoc chon", vbExclamation, "INfo":: Exit Sub  
       
        Set wB0 = Workbooks.Add 'Adding New Workbook
        
        For Each vFile In .SelectedItems
            Set wB = Workbooks.Open(vFile, UpdateLinks:=False)
            wB.ActiveSheet.Copy After:=wB0.Sheets(wB0.Sheets.Count)
            kk = InStrRev(vFile, "\")
            ActiveSheet.Name = Mid(vFile, kk + 1, InStrRev(vFile, ".") - 1 - kk)
            wB.Close False
        Next
    End With

Code chỉ sửa đoạn trên,

Chú ý vì sửa lại nên đoạn code tiếp theo bạn cũng phải sửa theo cho nó chuẩn, ví như ten sheet chuyển sang được lấy là tên file, nên giờ bạn phải xử lý đoạn code sau cho phù hợp
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Anh Quang Hải và Anh MuaBuiRoi cùng mọi người nhiều ạ.hihi.
Em đã làm theo cách của anh Quang Hải và đã thành công ạ.

 
Upvote 0

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

Back
Top Bottom