xuất dữ liệu lớn từ access sang excel

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

Popular posts from this blog

Khẩn cấp - File Excel chứa các ký tự đặc biệt ở họ và tên liên hệ

Excel 2016 - mở tất cả các tệp trong MỘT phiên bản

Điều tôi muốn làm trong Excel 2010 là tạo một nút tùy chỉnh và gắn nó vào thanh công cụ Truy nhập nhanh và chạy một macro cụ thể.