doveandrose
hello
- Tham gia
- 3/7/09
- Bài viết
- 2,372
- Được thích
- 2,262
em nghe nói có khai báoCó thể ít có người quan tâm về câu đố này quá nhỉ
Mã:
"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"
em nghe nói có khai báoCó thể ít có người quan tâm về câu đố này quá nhỉ
"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"
Cái khai báo này có sài được trong office 2016 hay win10 không anh, em sài foxpro kết nối với excel, nhưng bị vướng chỗ này không kết nối được!!!em nghe nói có khai báo
xài được trên 2 phiên bản nhưng mà nó bị hạn chế quá , chắc không phải đáp án của anh nên không trả lời sớm .Mã:"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"
mình chỉ biết xài excel thôi nhé bạn , những thứ cao cấp như foxpro (nghe tên là thấy bờ-rồ) mình không biết bạn ơi .Cái khai báo này có sài được trong office 2016 hay win10 không anh, em sài foxpro kết nối với excel, nhưng bị vướng chỗ này không kết nối được!!!
Mạnh cũng thử Góp vui một tí coi
I/ Có 50 File ở 50 Folder khác nhau ..và Ổ dĩa khác nhau VD: 25 Folder ở ổ E:\ và 25 Folder ở ổ D:\
1/ VD: E:\mm\1.xls
2/ VD: E:\mm\kk\2.xlsx
3/ VD: E:\hh\mm\kk\3.xls
.......................................
1/ VD: D:\mm\4.xls
2/ VD: D:\mm\kk\5.xlsb
3/ VD: D:\hh\mm\kk\6.xlsm
.......................................
II/ Có chung cấu trúc cần tổng Hợp như sau
1/ Tên Sheet cần tổng hợp là GPE
2/ Vùng dữ liệu cần tổng hợp là [A2:J100]
3/ Sử dụng ADO tổng hợp tất cả các file trên gán nối tiếp kết quả xuống 1 Sheet
4/ Không Sử dụng Array(file1,file2,file3 ......... To 50...........) để duyệt Files
5/ Không sử dụng cột phụ trên Sheet lấy đường dẫn của File xong chạy For Next ....
Rất mong các Bạn tham gia code chơi
xin cảm ơn
Dim FSO As Object, FileItem As Object, cn As Object, rs As Object, SubFolder As Object
Sub kieumanh(SourceFolderName As String, IncludeSubfolders As Boolean)
Dim query As String
Const ExcelExtension As String = "|xls|xlsb|xlsm|xlsx|"
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
For Each FileItem In .GetFolder(SourceFolderName).Files
If InStr(ExcelExtension, "|" & .GetExtensionName(FileItem.Path) & "|") Then
If Left(FileItem.Name, 1) <> "~" And FileItem.Path <> ThisWorkbook.FullName Then
With cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileItem.Path & ";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";"
.Open
End With
query = " SELECT * FROM [GPE$A2:J200]"
rs.Open query, cn
Range("A" & Range("A65000").End(3).Row + 1).CopyFromRecordset rs
rs.Close: cn.Close
End If
End If
Next FileItem
If IncludeSubfolders Then
For Each SubFolder In .GetFolder(SourceFolderName).SubFolders
kieumanh SubFolder.Path, True
Next SubFolder
End If
End With
Set rs = Nothing: Set cn = Nothing
Set FileItem = Nothing
Set FSO = Nothing
End Sub
Sub run()
Range("A2:J" & Range("A65000").End(3).Row).Clear
Call kieumanh("E:\", True)
Call kieumanh("D:\", True)
End Sub
Hic, fox nó đã bị bỏ rơi lâu rồi, các diễn đàn về fox từ từ cũng mất dần, em lạc hậu nên vẫn còn sài nó, nó vẫn còn hỗ trợ tốt trong một số trường hợp excel không làm được, nên em mới tạo liên kết giữa fox và excel, chắc có lẽ phải hài lòng với win 7 và excel 2013, thanks anh !!!mình chỉ biết xài excel thôi nhé bạn , những thứ cao cấp như foxpro (nghe tên là thấy bờ-rồ) mình không biết bạn ơi .
BẠn cứ mạnh dạn gửi câu trả lời, chủ yếu là học hỏi kinh nghiệm lẫn nhau thôi mà bạn.em nghe nói có khai báo
xài được trên 2 phiên bản nhưng mà nó bị hạn chế quá , chắc không phải đáp án của anh nên không trả lời sớm .Mã:"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"
ủa thì chuỗi đặt làBẠn cứ mạnh dạn gửi câu trả lời, chủ yếu là học hỏi kinh nghiệm lẫn nhau thôi mà bạn.
cn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & ThisWorkbook.FullName
Ý nói là viết hết cái sub, coi mức độ nó dài đến thế nào ý.ủa thì chuỗi đặt là
có phải ý anh hỏi là : dùng chuỗi kết nối nào cho cả 2 phiên bản 2003 với 2007 ?Mã:cn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & ThisWorkbook.FullName
à thì ra ý anh là thi viết code cho ngắn nhất , vậy thì em rớt từ ngoài vòng gửi xe rồi , không có hi vọng , nhưng thôi kệ có nhiêu nhậu nhiêuÝ nói là viết hết cái sub, coi mức độ nó dài đến thế nào ý.
Public Sub hello()
Dim cn As Object
Set cn = CreateObject("adodb.connection")
cn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & ThisWorkbook.FullName
Sheet1.Range("A1").CopyFromRecordset cn.Execute("select * from [Sheet2$]")
End Sub
Sáng tới giờ mình xuống Sài Gòn chơi ... mới về coi ....thấy không chạy được Vì lấy cả D hay E sao ....Mà trong Hai ổ đó có quá nhiều Folder nó duyệt hoài hay sao .... nếu để y trang vậy chạy là lỗi codeKhông biết code này có đảm bảo yêu cầu của anh kieu manh ko?
Mã:Dim FSO As Object, FileItem As Object, cn As Object, rs As Object, SubFolder As Object Sub kieumanh(SourceFolderName As String, IncludeSubfolders As Boolean) Dim query As String Const ExcelExtension As String = "|xls|xlsb|xlsm|xlsx|" Set FSO = CreateObject("Scripting.FileSystemObject") With FSO Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") For Each FileItem In .GetFolder(SourceFolderName).Files If InStr(ExcelExtension, "|" & .GetExtensionName(FileItem.Path) & "|") Then If Left(FileItem.Name, 1) <> "~" And FileItem.Path <> ThisWorkbook.FullName Then With cn .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileItem.Path & ";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";" .Open End With query = " SELECT * FROM [GPE$A2:J200]" rs.Open query, cn Range("A" & Range("A65000").End(3).Row + 1).CopyFromRecordset rs rs.Close: cn.Close End If End If Next FileItem If IncludeSubfolders Then For Each SubFolder In .GetFolder(SourceFolderName).SubFolders kieumanh SubFolder.Path, True Next SubFolder End If End With Set rs = Nothing: Set cn = Nothing Set FileItem = Nothing Set FSO = Nothing End Sub Sub run() Range("A2:J" & Range("A65000").End(3).Row).Clear Call [B]kieumanh("E:\", True)[/B] Call [B]kieumanh("D:\", True)[/B] End Sub
Cái dòng màu đỏ Mạnh thấy chạy hay lỗi trên một số máy lắm và lấy lên nó hay Lỗi Font....Nếu hỏi mình Tại sao ....Tịtà thì ra ý anh là thi viết code cho ngắn nhất , vậy thì em rớt từ ngoài vòng gửi xe rồi , không có hi vọng , nhưng thôi kệ có nhiêu nhậu nhiêu
Mã:Public Sub hello() Dim cn As Object Set cn = CreateObject("adodb.connection") [COLOR=#ff0000][B]cn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ="[/B][/COLOR] & ThisWorkbook.FullName Sheet1.Range("A1").CopyFromRecordset cn.Execute("select * from [Sheet2$]") End Sub
Thật ra em mới chỉ test trên 1 folder (ổ E) với nhiều subfolders thôi. Tại vì anh bảo để trong 50 folder khác nhau mà ko rõ nhưng folder đó có chung đặc điểm gì không nên em phải đọc cả ổ ạ.Sáng tới giờ mình xuống Sài Gòn chơi ... mới về coi ....thấy không chạy được Vì lấy cả D hay E sao ....Mà trong Hai ổ đó có quá nhiều Folder nó duyệt hoài hay sao .... nếu để y trang vậy chạy là lỗi code
Nếu lấy 1 Foder thì Ok VD: D:\mm\*.xls"
Thì cấu trúc Folder nó lộn xộn như bài 240 đóThật ra em mới chỉ test trên 1 folder (ổ E) với nhiều subfolders thôi. Tại vì anh bảo để trong 50 folder khác nhau mà ko rõ nhưng folder đó có chung đặc điểm gì không nên em phải đọc cả ổ ạ.
Mình không đặt nặng vấn đề font, miễn sao lấy được dữ liệu thôi.Cái dòng màu đỏ Mạnh thấy chạy hay lỗi trên một số máy lắm và lấy lên nó hay Lỗi Font....Nếu hỏi mình Tại sao ....Tịt
VD: Font Gốc =Thông ............. Nó Sang Th?ng
Lấy thì OK rồi đó ... nhưng vẫn lỗi code trên 1 số máy ...Office 2007 lỗi chắc luônMình không đặt nặng vấn đề font, miễn sao lấy được dữ liệu thôi.
Ý anh ở đây là đã biết trước đường dẫn của các file?Thì cấu trúc Folder nó lộn xộn như bài 240 đó
1/ VD: E:\mm\1.xls
2/ VD: E:\ma\kk\2.xlsx
3/ VD: E:\hh\mm\kk\3.xls
.......................................
1/ VD: D:\mm\4.xls
2/ VD: D:\mm\kk\5.xlsb
3/ VD: D:\hh\mm\kk\6.xlsm
Viết đơn giản thôi mà thay vì ta thường hay sử dụng Array(...) gán vao mãng thì ta dụng cách khác ngắn gọn và hay hơn thôi .....
Nếu 1 vài File thì Array Ok ... nhiều file thì thấy Gớm
đúng rồi đó ....vấn đề là duyệt file gán vào mãng làm sao cho nó gọn lại và không sử dụng cách mà trên GPE hay xài là Array(file1,file2,... To 50) vậy thôi hay lấy đường dẫn lên Sheet xong duyệt FilesÝ anh ở đây là đã biết trước đường dẫn của các file?
Vậy thì viết như thế nào cho nó chạy với các máy? Xét version là điều không thể tránh?Lấy thì OK rồi đó ... nhưng vẫn lỗi code trên 1 số máy ...Office 2007 lỗi chắc luôn
Hôm thấy code Anh Hải khai báo thấy chạy Tốt ...Nhưng chỉ Office 2007 là LỗiVậy thì viết như thế nào cho nó chạy với các máy? Xét version là điều không thể tránh?
Nếu không xét vấn đền font thì tôi viết như sau:Hôm thấy code Anh Hải khai báo thấy chạy Tốt ...Nhưng chỉ Office 2007 là Lỗi
Còn xét theo Ver thì chạy Tuốt ....Chờ Bạn khai phá cách viết mới cho Mạnh Học với
Sub DoVui()
With CreateObject("ADODB.Connection")
.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & ThisWorkbook.FullName
Sheet2.[a2].CopyFromRecordset .Execute("Select * From [Sheet1$]")
End With
End Sub