hoabattu3387
Thành viên chính thức
- Tham gia
- 11/9/08
- Bài viết
- 91
- Được thích
- 2
Máy tôi chạy bình thường, bạn thử chạy code này từ file Excel coi nó có bị gì không nhétiêu đề cột đúng a ạ, chạy qua dòngthì báo lôĩ và thoát luôn access.Mã:Set cn = CurrentProject.Connection
cái chỗ "insert in to BVL..." liệu nó có hiểu insert vào bảng BVL ko anh?
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\POS.accdb")
cn.Execute ("insert into BVL SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & ThisWorkbook.FullName & "].[DetailOfCreditTotalTransaction$A6:Z100] Where MID is not null")
e chạy từ excel thì được ạ. nhưng khi e sửa code như này vào accessMáy tôi chạy bình thường, bạn thử chạy code này từ file Excel coi nó có bị gì không nhé
Mã:Dim cn As Object Set cn = CreateObject("ADODB.Connection") cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\POS.accdb") cn.Execute ("insert into BVL SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & ThisWorkbook.FullName & "].[DetailOfCreditTotalTransaction$A6:Z100] Where MID is not null")
Sub importfile()
Dim tblefilename, tblename As String
tblefilename = Access.CurrentProject.Path
FName = "\BVL.XLSX"
tblename = tblefilename & FName
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & tblename)
cn.Execute ("insert into BVL SELECT * FROM [Excel 12.0;HDR=YES;DATABASE= [DetailOfCreditTotalTransaction$A6:Z100] Where MID is not null")
DoCmd.OutputTo ObjectType:=acOutputQuery, ObjectName:="chi tiet gui bvl", OutputFormat:=acFormatXLSX, Outputfile:=tblefilename & "\chi tiet gui bvl.xlsx"
DoCmd.OutputTo ObjectType:=acOutputReport, ObjectName:="BVL", OutputFormat:=acFormatPDF, Outputfile:=tblefilename & "\BVL.pdf"
DoCmd.OutputTo ObjectType:=acOutputReport, ObjectName:="VTB", OutputFormat:=acFormatPDF, Outputfile:=tblefilename & "\VTB.pdf"
End Sub
cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & tblename)
Bạn thử test code sau:e chạy từ excel thì được ạ. nhưng khi e sửa code như này vào access
thì báo lỗi "unreconigze database fomat" từ dòngMã:Sub importfile() Dim tblefilename, tblename As String tblefilename = Access.CurrentProject.Path FName = "\BVL.XLSX" tblename = tblefilename & FName Dim cn As Object Set cn = CreateObject("ADODB.Connection") cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & tblename) cn.Execute ("insert into BVL SELECT * FROM [Excel 12.0;HDR=YES;DATABASE= [DetailOfCreditTotalTransaction$A6:Z100] Where MID is not null") DoCmd.OutputTo ObjectType:=acOutputQuery, ObjectName:="chi tiet gui bvl", OutputFormat:=acFormatXLSX, Outputfile:=tblefilename & "\chi tiet gui bvl.xlsx" DoCmd.OutputTo ObjectType:=acOutputReport, ObjectName:="BVL", OutputFormat:=acFormatPDF, Outputfile:=tblefilename & "\BVL.pdf" DoCmd.OutputTo ObjectType:=acOutputReport, ObjectName:="VTB", OutputFormat:=acFormatPDF, Outputfile:=tblefilename & "\VTB.pdf" End Sub
Mã:cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & tblename)
Private Sub Command0_Click()
Dim tblefilename, tblename As String
tblefilename = Access.CurrentProject.Path
FName = "\DetailOfCreditTotalTransaction_20170926_105939.xlsx"
tblename = tblefilename & FName
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & tblefilename & "\POS.accdb")
cn.Execute ("insert into [BVL] SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & tblename & "].[DetailOfCreditTotalTransaction$A6:Z100] Where MID is not null")
DoCmd.OutputTo ObjectType:=acOutputQuery, ObjectName:="chi tiet gui bvl", OutputFormat:=acFormatXLSX, Outputfile:=tblefilename & "\chi tiet gui bvl.xlsx"
DoCmd.OutputTo ObjectType:=acOutputReport, ObjectName:="BVL", OutputFormat:=acFormatPDF, Outputfile:=tblefilename & "\BVL.pdf"
DoCmd.OutputTo ObjectType:=acOutputReport, ObjectName:="VTB", OutputFormat:=acFormatPDF, Outputfile:=tblefilename & "\VTB.pdf"
End Sub
Đã chạy oki rồi anh ạ. Em hỏi chút là dictionary có dùng được trong access không anh?em search google mà không thấy nói đến, em muốn query từng MiD và xuất ra các file excel 1 cách tự động (như query "chi tiet gui bvl" của em nhưng có bao nhiêu MID thì bấy nhiêu file chứ ko phải 1 file tổng hợp như hiện tại ạ)Bạn thử test code sau:
Có sẵn Query thì chỉ duyệt qua nó thôi, đâu cần dùng dic làm gì bạn.Đã chạy oki rồi anh ạ. Em hỏi chút là dictionary có dùng được trong access không anh?em search google mà không thấy nói đến, em muốn query từng MiD và xuất ra các file excel 1 cách tự động (như query "chi tiet gui bvl" của em nhưng có bao nhiêu MID thì bấy nhiêu file chứ ko phải 1 file tổng hợp như hiện tại ạ)
A giúp em để em học tập với ạ. Em chỉ nghĩ đến dic, nhưng ở excel thì e biết làm còn access e mới học nên chưa nghĩ ra cách ạ.Có sẵn Query thì chỉ duyệt qua nó thôi, đâu cần dùng dic làm gì bạn.
Tạo 1 recordset với câu truy vấn là select distinct MID..., rồi sau đó dùng vòng lặp duyệt qua từng dòng của field MID này, mỗi lần duyệt qua lấy giá trị gán vào điều kiện lọc và xuất file. LÀm như vậy sẽ gọn và linh hoạt hơn.A giúp em để em học tập với ạ. Em chỉ nghĩ đến dic, nhưng ở excel thì e biết làm còn access e mới học nên chưa nghĩ ra cách ạ.
A kiểm tra đoạn sau của e giúp e với sao recordcount chỉ có 1 record nhỉ? em có sai chỗ nào không ạ?Tạo 1 recordset với câu truy vấn là select distinct MID..., rồi sau đó dùng vòng lặp duyệt qua từng dòng của field MID này, mỗi lần duyệt qua lấy giá trị gán vào điều kiện lọc và xuất file. LÀm như vậy sẽ gọn và linh hoạt hơn.
Dim rcs As Recordset
Dim qry As QueryDef
Set qry = CurrentDb.QueryDefs("chi tiet gui bvl")
Set rcs = qry.OpenRecordset
MsgBox (rcs.RecordCount)
Bạn thêm dòng này trước Msgbox:A kiểm tra đoạn sau của e giúp e với sao recordcount chỉ có 1 record nhỉ? em có sai chỗ nào không ạ?
Mã:Dim rcs As Recordset Dim qry As QueryDef Set qry = CurrentDb.QueryDefs("chi tiet gui bvl") Set rcs = qry.OpenRecordset MsgBox (rcs.RecordCount)
E TẠO 1 QUERY "MID" VÀ LÀM NHƯ SAU MÀ BÁO LỖI, A XEM GIÚP EM THEO LINK SAU NHÉ (E KO POST ĐC FILE) https://drive.google.com/drive/folders/0By-1v-3ovcUWWWtrQzVyOTRmRGcTạo 1 recordset với câu truy vấn là select distinct MID..., rồi sau đó dùng vòng lặp duyệt qua từng dòng của field MID này, mỗi lần duyệt qua lấy giá trị gán vào điều kiện lọc và xuất file. LÀm như vậy sẽ gọn và linh hoạt hơn.
Làm cho bạn luôn.E TẠO 1 QUERY "MID" VÀ LÀM NHƯ SAU MÀ BÁO LỖI, A XEM GIÚP EM THEO LINK SAU NHÉ (E KO POST ĐC FILE) https://drive.google.com/drive/folders/0By-1v-3ovcUWWWtrQzVyOTRmRGc
Private Sub Command1_Click()
Dim db As DAO.Database
Dim rs, rs1 As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim mypath As String
mypath = Access.CurrentProject.Path
Set db = CurrentDb()
Set rs = db.OpenRecordset("SELECT DISTINCT MID FROM BVL", dbOpenDynaset)
Label3.Visible = True
txtMid.Visible = True
Do While Not rs.EOF
txtMid = rs("MID")
With DoCmd
.OpenReport "rptBVL", acViewPreview, , "[BVL].[MID]='" & txtMid & "'"
.OutputTo acOutputReport, "rptBVL", acFormatPDF, mypath & "\" & txtMid & ".pdf"
.Close acReport, "rptBVL"
Set qdf = db.QueryDefs("chi tiet gui bvl")
qdf.Parameters(0) = txtMid
Set rs1 = qdf.OpenRecordset
.OutputTo acOutputQuery, "chi tiet gui bvl", acFormatXLSX, mypath & "\" & txtMid & ".xlsx"
End With
rs.MoveNext
Loop
Label3.Visible = False
txtMid.Visible = False
Set rs = Nothing
Set rs1 = Nothing
Set db = Nothing
MsgBox "Da thuc hien xong viec xuat du lieu.", vbExclamation
End Sub
Em cảm ơn anh Hai Lúa ạ. Em đọc code của anh và đã hiểu tương đối ạ, nhưng anh có thể xem giúp em vì sao em dùng filter thì bị lỗi là do sai chỗ nào ạ? Em muốn học hỏi thêm cách này nữa. anh giúp em nhé.Làm cho bạn luôn.
Mã:Private Sub Command1_Click() Dim db As DAO.Database Dim rs, rs1 As DAO.Recordset Dim qdf As DAO.QueryDef Dim mypath As String mypath = Access.CurrentProject.Path Set db = CurrentDb() Set rs = db.OpenRecordset("SELECT DISTINCT MID FROM BVL", dbOpenDynaset) Label3.Visible = True txtMid.Visible = True Do While Not rs.EOF txtMid = rs("MID") With DoCmd .OpenReport "rptBVL", acViewPreview, , "[BVL].[MID]='" & txtMid & "'" .OutputTo acOutputReport, "rptBVL", acFormatPDF, mypath & "\" & txtMid & ".pdf" .Close acReport, "rptBVL" Set qdf = db.QueryDefs("chi tiet gui bvl") qdf.Parameters(0) = txtMid Set rs1 = qdf.OpenRecordset .OutputTo acOutputQuery, "chi tiet gui bvl", acFormatXLSX, mypath & "\" & txtMid & ".xlsx" End With rs.MoveNext Loop Label3.Visible = False txtMid.Visible = False Set rs = Nothing Set rs1 = Nothing Set db = Nothing MsgBox "Da thuc hien xong viec xuat du lieu.", vbExclamation End Sub
Giải nén và chạy file Access nhé.
xin lỗi anh, e vừa sharing rồi ạ.Tôi không tải file được vì không có quyền
View attachment 184510
Private Sub Command2_Click()
Dim tblefilename, tblename As String
tblefilename = Access.CurrentProject.Path
FName = "\BVL.xlsx"
tblename = tblefilename & FName
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & tblefilename & "\POS.accdb")
cn.Execute ("DELETE * FROM BVL")
cn.Execute ("insert into [BVL] SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & tblename & "].[DetailOfCreditTotalTransaction$A6:Z100] Where MID is not null")
Set cn = Nothing
End Sub
Private Sub Command3_Click()
Dim tblefilename, tblename As String
tblefilename = Access.CurrentProject.Path
FName = "\BVL.xlsx"
tblename = tblefilename & FName
DoCmd.OutputTo ObjectType:=acOutputQuery, ObjectName:="chi tiet gui bvl", OutputFormat:=acFormatXLSX, Outputfile:=tblefilename & "\chi tiet gui bvl.xlsx"
DoCmd.OutputTo ObjectType:=acOutputReport, ObjectName:="BVL", OutputFormat:=acFormatPDF, Outputfile:=tblefilename & "\BVL.pdf"
DoCmd.OutputTo ObjectType:=acOutputReport, ObjectName:="VTB", OutputFormat:=acFormatPDF, Outputfile:=tblefilename & "\VTB.pdf"
Dim rcs, rcs1 As Recordset
Dim qry, qry1 As QueryDef
Set qry = CurrentDb.QueryDefs("chi tiet gui bvl")
Set qry1 = CurrentDb.QueryDefs("mid")
Set rcs = qry.OpenRecordset
rcs.MoveLast
rcs.Move first
Set rcs1 = qry1.OpenRecordset
For I = 0 To rcs1.RecordCount - 1
With rcs
.Filter = "[Mid] =" & rcs1!Mid
Set orcs = .OpenRecordset
.Close
orcs.MoveLast
orcs.MoveFirst
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, orcs, tblefilename & "\" & I & ".xlsx", True
End With
Next
Set rcs = Nothing
Set rcs1 = Nothing
Set cn = Nothing
End Sub
Bạn chỉnh code sau và chạy thử nhé
Mã:On Error Resume Next DoCmd.DeleteObject acTable, "BVL" DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "BVL", "DuongDanDenFile", True, "DetailOfCreditTotalTransaction!A6:Z17"
DoCmd.TransferSpreadsheet(acImport, _
acSpreadsheetTypeExcel12Xml, "D:\data1.accdb\Sales", vFileSourceLink, _
False, "A2:K50000")