[GIÚP ĐỠ] Lấy dữ liệu từ Access vào Excel bằng VBA

Liên hệ QC

nxchuongnuce

Thành viên mới
Tham gia
5/4/16
Bài viết
2
Được thích
0
Em có sưu tầm được 1 đoạn code lấy dữ liệu từ Access vào Excel, có mấy vấn đề này nhờ ae giúp đỡ mấy vấn đề sau:
1. Chỉnh giúp em để khi chạy code nó hiện lên bảng open để chọn đường dẫn và file Access.
2. Trong file Access có cột "Ouput Case" (có dấu cách) thì em không copy vào được.
3. Cột C trong file Excel em muốn nối cột Story và cột Column trong file Access thì làm thế nào cho nhanh hơn ạ (em đang dùng hàm For để nối).

File Access em không gửi được do không hỗ trợ định dạng nên em nén vào ạ!
Code của em đây ạ, nhờ ae giúp đỡ!

Sub AccessToExcel()
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Column forces.accdb"
Sheet1.Range("A3").CopyFromRecordset cn.Execute("Select Story,Column From [Element Forces - Columns]")
Sheet1.Range("E3").CopyFromRecordset cn.Execute("Select Station,P,V2,V3,T,M2,M3 From [Element Forces - Columns]")

CO = Application.WorksheetFunction.CountA(Sheet1.[A3:A632911])
For i = 1 To CO
Sheet1.Cells(2 + i, "C") = Sheet1.Cells(2 + i, "A") & Sheet1.Cells(2 + i, "B")
Next i
End Sub
 

File đính kèm

  • Book1.xlsm
    7.5 KB · Đọc: 3
  • Column forces.rar
    154.1 KB · Đọc: 2
Em có sưu tầm được 1 đoạn code lấy dữ liệu từ Access vào Excel, có mấy vấn đề này nhờ ae giúp đỡ mấy vấn đề sau:
1. Chỉnh giúp em để khi chạy code nó hiện lên bảng open để chọn đường dẫn và file Access.
2. Trong file Access có cột "Ouput Case" (có dấu cách) thì em không copy vào được.
3. Cột C trong file Excel em muốn nối cột Story và cột Column trong file Access thì làm thế nào cho nhanh hơn ạ (em đang dùng hàm For để nối).

File Access em không gửi được do không hỗ trợ định dạng nên em nén vào ạ!
Code của em đây ạ, nhờ ae giúp đỡ!

Sub AccessToExcel()
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Column forces.accdb"
Sheet1.Range("A3").CopyFromRecordset cn.Execute("Select Story,Column From [Element Forces - Columns]")
Sheet1.Range("E3").CopyFromRecordset cn.Execute("Select Station,P,V2,V3,T,M2,M3 From [Element Forces - Columns]")

CO = Application.WorksheetFunction.CountA(Sheet1.[A3:A632911])
For i = 1 To CO
Sheet1.Cells(2 + i, "C") = Sheet1.Cells(2 + i, "A") & Sheet1.Cells(2 + i, "B")
Next i
End Sub
1) Thì thử dùng GetOpenFile
tham khảo đây: https://www.dummies.com/software/mi...the-getopenfilename-method-in-excel-2016-vba/

2) Có dấu cách thì trong SELECT dùng dấu ngoặc vuông, ví dụ: [Out Case]

3) Dùng phép toán nối chuỗi & luôn
SELECT Story,Column, (Story & Column) AS 'Story-Column' FROM ......
 
Lần chỉnh sửa cuối:
1) Thì thử dùng GetOpenFile
tham khảo đây: https://www.dummies.com/software/mi...the-getopenfilename-method-in-excel-2016-vba/

2) Có dấu cách thì trong SELECT dùng dấu ngoặc vuông, ví dụ: [Out Case]

3) Dùng phép toán nối chuỗi & luôn
SELECT Story,Column, (Story & Column) AS 'Story-Column' FROM ......

Cảm ơn bác abili đã hỗ trợ!
Em đã làm được, nhưng có thêm vấn đề này nhờ bác xử lý giúp:
1. Khi em chạy code để hiện lên bảng Open file, thì nó chỉ hiện được 1 định dạng, em muốn xuất hiện cùng lúc nhiều định dạng cùng lúc thì làm thế nào ạ. Ví dụ .mdb và .accdb (không tính all file bác nhé).
2. Em có nhiều file Access với nhiều định dạng khác nhau (bác xem hình đính kèm), em muốn làm thêm 1 đoạn code để kiểm tra tên Table sau đó mới import các cột tương ứng với từng Table (ví dụ: ứng với file có table là "Element Forces - Columns" thì import cột "Column", ứng với file có table là "Element Forces - Frames" thì import cột "Frame").

Đây là đoạn code em đã chỉnh sửa lại!

Sub GetImportFileName()
Dim FileInfo As String
Dim FilterIndex As Long
Dim Title As String
Dim FileName As Variant
Dim cn As Object

'Set up list of file filters
FileInfo = "All Files (*.*),*.*," & _
"Text Files (*.accdb),*.accdb," & _
"Text Files (*.mdb),*.mdb,"

'Display *.* by default
FilterIndex = 1
'Set the dialog box caption
Title = "Select a File to Import"
'Get the filename
FileName = Application.GetOpenFilename(FileInfo, FilterIndex, Title)
'Handle return info from dialog box
If FileName = False Then
MsgBox "No file was selected."
Exit Sub
Else
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName

Range("C12").CopyFromRecordset cn.Execute("Select (Story & Column) AS 'Story-Column' From [Element Forces - Columns]")
Range("D12").CopyFromRecordset cn.Execute("Select [Output Case],Station,P,V2,V3,T,M2,M3 From [Element Forces - Columns]")

MsgBox "You selected " & FileName
End If
End Sub

Capture 1.PNGCapture 2.PNG
 

File đính kèm

  • Access.rar
    469.1 KB · Đọc: 13
Cảm ơn bác abili đã hỗ trợ!
Em đã làm được, nhưng có thêm vấn đề này nhờ bác xử lý giúp:
1. Khi em chạy code để hiện lên bảng Open file, thì nó chỉ hiện được 1 định dạng, em muốn xuất hiện cùng lúc nhiều định dạng cùng lúc thì làm thế nào ạ. Ví dụ .mdb và .accdb (không tính all file bác nhé).
2. Em có nhiều file Access với nhiều định dạng khác nhau (bác xem hình đính kèm), em muốn làm thêm 1 đoạn code để kiểm tra tên Table sau đó mới import các cột tương ứng với từng Table (ví dụ: ứng với file có table là "Element Forces - Columns" thì import cột "Column", ứng với file có table là "Element Forces - Frames" thì import cột "Frame").

Đây là đoạn code em đã chỉnh sửa lại!

Sub GetImportFileName()
Dim FileInfo As String
Dim FilterIndex As Long
Dim Title As String
Dim FileName As Variant
Dim cn As Object

'Set up list of file filters
FileInfo = "All Files (*.*),*.*," & _
"Text Files (*.accdb),*.accdb," & _
"Text Files (*.mdb),*.mdb,"

'Display *.* by default
FilterIndex = 1
'Set the dialog box caption
Title = "Select a File to Import"
'Get the filename
FileName = Application.GetOpenFilename(FileInfo, FilterIndex, Title)
'Handle return info from dialog box
If FileName = False Then
MsgBox "No file was selected."
Exit Sub
Else
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName

Range("C12").CopyFromRecordset cn.Execute("Select (Story & Column) AS 'Story-Column' From [Element Forces - Columns]")
Range("D12").CopyFromRecordset cn.Execute("Select [Output Case],Station,P,V2,V3,T,M2,M3 From [Element Forces - Columns]")

MsgBox "You selected " & FileName
End If
End Sub

View attachment 232183View attachment 232184
Thì kiểu này
Mã:
'Set up list of file filters
FileInfo = "DB Files (*.*db),*.*db," & _
"All Files (*.*),*.*"

Còn Table name có cách nhưng phức tạp, thường ta có file access thì mặc định ta phải biết trong đó có cấu trúc các table, form, views... thế nào rồi, nên không ai lại đi dò name của table cả (rất ít khi).
Vì vậy thế cách tốt nhất là phải căn cứ vào tên file (bạn đặt sao cho nhận dạng được)
 
Web KT

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

Back
Top Bottom