xuất dữ liệu lớn từ access sang excel
tôi có một truy vấn trả về một triệu bản ghi.
tôi muốn xuất các bản ghi này sang tệp excel 2007 thông qua macro truy cập,
nhưng ai nhận được thông báo lỗi giới hạn bộ nhớ.
Có cách nào để khắc phục vấn đề này?
Trả lời:
Ở đây tôi đã lấy mã được tìm thấy trên trang web mà tôi đã cung cấp cho bạn trước đó và nhanh chóng tổng hợp lại một số thứ cho bạn.
Chức năng công cộng SendTQ2ExcelSheet()
' Nguồn: http://www.btabdevelopment.com/ts/default.aspx?PageId=49
' Được sửa đổi bởi: Daniel Pineault cho một câu hỏi trên diễn đàn
' strTQName là tên bảng hoặc truy vấn bạn muốn gửi tới Excel
' strSheetName là tên của sheet bạn muốn gửi nó tới
Dim đầu tiên Như DAO.Recordset
Dim ApXL làm đối tượng
Dim xlWBk làm đối tượng
Dim xlWSh làm đối tượng
Làm mờ sSQL dưới dạng chuỗi
Dim strPath dưới dạng chuỗi
Dim strSheetName dưới dạng chuỗi
Dim iLstRec Càng Dài
Dim iStepSize dưới dạng số nguyên
Const xlUp As Long = -4162
Khi có lỗi Đi tới Err_handler
strPath = "C:\Users\Main\Documents\Donation.xls" 'Đường dẫn/Tên của xls cần thêm vào
strSheetName = "Đóng góp" 'Tên của bảng tính để thêm vào
iLstRec = DMax("[Inv_Id]", "temp") 'Xác định số cuối cùng trong bảng
iStepSize = 10 'Số lượng bản ghi cần xử lý tại một thời điểm
'Khởi động Excel
Đặt ApXL = CreateObject("Excel.Application")
Đặt xlWBk = ApXL.Workbooks.Open(strPath)
ApXL.Visible = True 'Chọn xem bạn có muốn hay không
Đặt xlWSh = xlWBk.Worksheets(strSheetName)
'Bắt đầu quá trình xuất khẩu
Đối với i = 1 Đến iLstRec Bước iStepSize
iMaxLimit = i + iStepSize - 1
sSQL = "CHỌN * TỪ temp WHERE Inv_Id GIỮA " & i & " VÀ " & iMaxLimit & ";"
Đặt rst = CurrentDb.OpenRecordset(sSQL, dbOpenSnapshot)
Nếu rst.RecordCount <> 0 Thì 'Đảm bảo chúng tôi thực sự có bản ghi để nối thêm
'Tìm ô được sử dụng cuối cùng và nối vào bên dưới ô đó.
' xlWSh.Cells(Rows.Count, 1).End(xlUp).Chọn 'Tìm ô được sử dụng lần cuối trong col A
xlWSh.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Chọn 'Tìm ô trống tiếp theo để chèn dữ liệu vào
đầu tiên.MoveFirst
ApXL.Selection.CopyFromRecordset đầu tiên 'Sao chép dữ liệu truy vấn của chúng tôi vào excel
Kết thúc nếu
Tiếp theo tôi
xlWSh.Range("A1").Select ' chọn ô đầu tiên để bỏ chọn tất cả các ô
Thoát_Nicely:
đầu tiên.Đóng
Đặt đầu tiên = Không có gì
Thoát chức năng
Err_handler:
DoCmd.SetWarnings Đúng
MsgBox Err.Description, vbExclaim, Err.Number
Đi tới Thoát_Nicely
Chức năng kết thúc
Bạn cần xác định đúng:
đường dẫn
strSheetName
iLstRec
iStepSize
sSQL
để phù hợp với hoàn cảnh của bạn.
Bạn cũng có thể đẩy quy trình đi xa hơn một chút và đóng sổ làm việc excel sau khi quá trình kết thúc và làm cho nó hoàn toàn minh bạch đối với người dùng. Tất cả phụ thuộc vào nhu cầu của bạn.
Tôi hy vọng điều này sẽ giúp bạn một chút.
Comments
Post a Comment