Thủ Thuật Access
Xuất dữ liệu từ Access ra Excel theo điều kiện - Phiên bản có thể in

+- Thủ Thuật Access (http://thuthuataccess.com/forum)
+-- Diễn đàn: Access Nâng Cao (http://thuthuataccess.com/forum/forum-11.html)
+--- Diễn đàn: Thủ thuật VBA (http://thuthuataccess.com/forum/forum-17.html)
+--- Chủ đề: Xuất dữ liệu từ Access ra Excel theo điều kiện (/thread-10469.html)



Xuất dữ liệu từ Access ra Excel theo điều kiện - Minh Tiên - 11-04-18

Tiên có bài toán xuất dữ liệu từ Access ra Excel theo yêu cầu:
1. Xuất trang 1:
- Nội dung ghi vào cột A, B: 2 dòng (gồm Stt và Nội dung. Bắt đầu từ Cell A1) (Xuất bên trái);
- Nội dung ghi vào cột D, E: 2 dòng (gồm Stt và Nội dung. Bắt đầu từ Cell D1) (Xuất bên phải);
Ngắt trang

2. Xuất từ trang 2 trở đi:
- Nội dung ghi vào cột A, B: 5 dòng (gồm Stt và Nội dung. Bắt đầu từ Cell A4) (Xuất bên trái);
- Nội dung ghi vào cột D, E: 5 dòng (gồm Stt và Nội dung. Bắt đầu từ Cell D4) (Xuất bên phải);
Ngắt trang;
Và cứ luôn phiên xuất trái, phải ...
- Xuất trái 5 dòng ..
- Xuất phải 5 dòng ...

(Có data kèm theo: DataXuatExcel)
Nhờ A/C/E Pro chỉ giáo giúp. Thanks !


RE: Xuất dữ liệu từ Access ra Excel theo điều kiện - ongke0711 - 12-04-18

Tôi đang test thử cách tiếp cận là: kiểm tra số dòng thuộc trang chẳn hay lẻ để tách cột. Trang 1 thì dễ rồi.


RE: Xuất dữ liệu từ Access ra Excel theo điều kiện - Minh Tiên - 12-04-18

Tiên cũng đã thử nhiều kiểu: Theo phân trang, nếu là trang 1 thì, ... trang 2 thì, ...; Theo số dòng đã xuất, ... Set lại dòng xuất, ...
Kết quả nếu xuất trái 10 dòng, xuất phải 20 dòng jj đó, rồi xuất sang trái, ... luân  phiên từ trên xuống thì OK.
Còn muốn:
- Trang 1: Xuất bên trái 10 dòng tại Cell A1 --> Xuất phải 10 dòng tại Cell D1
- Trang 2: Xuất trái 20 dòng tại Cell A12 --> Xuất phải 20 dòng tại Cell D12
thì bí, vẫn chưa thực hiện được. Khi set vị trí xuất về Cell yêu cầu, Chương trình cứ báo lỗi.

Nhờ các ACE Pro chỉ giáo giúp !
Thanks !


RE: Xuất dữ liệu từ Access ra Excel theo điều kiện - DooHoaangPhuuc - 12-04-18

Cháu nghĩ có nên xuất dữ liệu như thế ra từng Sheet (Sheet1, Sheet2, Sheet3, .......,)  trong Exel Workbook thì chắc dễ dàng hơn vì mỗi Sheet khi in ấn cũng tương đương từng trang in .


RE: Xuất dữ liệu từ Access ra Excel theo điều kiện - ongke0711 - 14-04-18

- Hiện tại code này thì chỉ mới xuất ra được như vậy: bạn có thực sự cần thêm khoảng trắng giữa các trang sau không? Đang ngâm cứu thêm cách làm khác.
- Số dòng trang 1: 2 dòng , trang 2: 3 dòng là tùy chọn khai báo hằng trong code.

[Hình: 39632116690_c67983a44b_o.png]

Mã PHP:
Option Compare Database
Option Explicit


Private Sub btnXuatExcel_Click()

   Dim oExcel As Object
   Dim oExcelWrkBk 
As Object
   Dim oExcelWrSht 
As Object
   Dim bExcelOpened 
As Boolean
   Set oExcel 
GetObject("""Excel.Application")
   If Err.Number <> 0 Then
       Err
.Clear
       Set oExcel 
CreateObject("Excel.Application")
       bExcelOpened False
   Else
       bExcelOpened 
True
   End 
If
   Set oExcelWrkBk oExcel.Workbooks.Add()
   Set oExcelWrSht oExcelWrkBk.Sheets(1)
   oExcel.Visible True

   Const iRowStart 
As Integer 1  'Bat dau ô A1'
   Const iColStart As Integer 1
   Const iSoDongTrang1 
As Integer 2   'So dòng o trang thu 1'
   Const iSoDongTrangKe As Integer 3  'So dòng o cac trang ke tiep, giong nhau'

   Dim iRowXuat As IntegeriColXuat As IntegeriSoDongDaxuat As Integer
   Dim iSoField 
As IntegeriSoTrang As Integer
   Dim iSoDongDaXuatPhai 
As IntegeriSoDongDaXuatTrai As IntegeriRowXuatPhai As Integer

   Dim rst 
As DAO.Recordset
   Set rst 
CurrentDb.OpenRecordset("SELECT * FROM table1 ORDER BY Stt;")

   If rst.RecordCount 0 Then
       rst
.MoveFirst
   Else
       MsgBox 
"Khong có du lieu."
       Exit Sub
   End 
If

   iSoField rst.Fields.Count
   iRowXuat 
iRowStart
   iSoDongDaxuat 
0
   Do 
While Not rst.EOF
       iSoDongDaxuat 
iSoDongDaxuat 1

       
'XuatTrai:'
       If iSoDongDaxuat <= iSoDongTrang1 Then
           With oExcelWrSht
               For iColXuat 
0 To iSoField 1
                   
.Cells(iRowXuatiColXuat iColStart).Value rst.Fields(iColXuat)
               Next iColXuat
           End With
           iRowXuat 
iRowXuat 1

           
'XuatPhai:'
       ElseIf iSoDongDaxuat iSoDongTrang1 And iSoDongDaxuat <= iSoDongTrang1 2 Then
           iRowXuat 
iSoDongDaxuat iSoDongTrang1
           With oExcelWrSht
               For iColXuat 
0 To iSoField 1
                   
.Cells(iRowXuatiColXuat iColStart iSoField 1).Value rst.Fields(iColXuat)
               Next iColXuat
               iRowXuatPhai 
iRowXuat
           End With

           
'Xuat trang ke tiep: Cot Trai'
       ElseIf Int((iSoDongDaxuat iSoDongTrangKe iSoDongTrang1 2) / iSoDongTrangKeMod 2 <> 0 Then
           iRowXuat 
iRowXuatPhai 1
           iRowXuat 
iRowXuat iSoDongDaXuatTrai
           With oExcelWrSht
               For iColXuat 
0 To iSoField 1
                   
.Cells(iRowXuatiColXuat iColStart).Value rst.Fields(iColXuat)
               Next iColXuat
               iSoDongDaXuatTrai 
iSoDongDaXuatTrai 1
           End With

           
'Xuat trang ke tiep: Cot Phai'
           iRowXuat iSoDongDaXuatTrai iSoDongTrangKe iSoDongTrang1 1
       ElseIf Int
((iSoDongDaxuat iSoDongTrangKe iSoDongTrang1 2) / iSoDongTrangKeMod 2 0 Then
           iRowXuat 
iRowXuat 1

           With oExcelWrSht
               For iColXuat 
0 To iSoField 1
                   
.Cells(iRowXuatiColXuat iColStart iSoField 1).Value rst.Fields(iColXuat)
               Next iColXuat
               iSoDongDaXuatPhai 
iSoDongTrangKe
           End With

       End 
If
       rst.MoveNext
   Loop


   rst
.Close
   oExcel
.Visible True
   Set oExcelWrSht 
Nothing
   Set oExcelWrkBk 
Nothing
   Set oExcel 
Nothing

End Sub 



RE: Xuất dữ liệu từ Access ra Excel theo điều kiện - Minh Tiên - 17-04-18

Thanks ongke0711 !
Mình đang rất cần các dòng trống này để làm việc khác xen vào !
Thân./.