
Thành thật mong các bạn thông cảm vì có thể trong chừng mực nào đó nội dung mà tôi sẽ theo đuổi trong chủ đề này sẽ không có liên quan nhiều đến các kỹ năng mà các bạn đang trao đổi rất sôi nổi trên diễn đàn - Excel VBA.
Những nội dung mà tôi dự định trao đổi sẽ ít nhiều bao gồm tất cả các kỹ năng liên quan đến 4 ứng dụng chính của Office đó là Excel, Access, Word và Powerpoint.
Để tránh sự thụ động trong việc đưa ra nội dung, tôi xin phép được lấy căn cứ ví dụ làm nền tảng cho các thảo luận. Cấu trúc cơ bản của phần này sẽ là:
+ Mỗi tuần sẽ có 1 ví dụ đặc trưng nhất trong bộ công cụ mà tôi hiện có. Tại ví dụ tôi sẽ trình bày khả năng áp dụng các thuật toán vào công việc hàng ngày của các bạn.
+ Nếu khả năng cho phép, tôi sẽ trả lời tất cả các câu hỏi của các bạn liên quan đến ví dụ hoặc các nội dung có tính chất tương đối gần với chủ đề đã trình bày.
+ Những thông tin tôi nhận được từ các email cũng sẽ được đưa ra chủ đề này để mọi người tiện theo dõi.
Tôi thực sự hy vọng chúng ta sẽ cùng hỗ trợ nhau để nâng cao hiệu quả công việc từ những kinh nghiệm được chia sẻ.
Để bắt đầu chủ đề,.... tôi xin được bắt đầu với ví dụ đầu tiên về Access với chức năng báo cáo thật mạnh mẽ của nó trước các đối thủ nặng ký là Crystal Report hoặc active report ...
[========================================================]
Tôi nhận được 1 câu hỏi từ thành viên của ddth như sau: (Xin phép được
----- Original Message -----
From: khanh quang
Sent: Wednesday, November 16, 2005 3:13 PM
Subject: Minh muon hoi ve access
Hi!
Minh moi ra truong nen voi lap trinh access con bo ngo lam
Hien tai,minh dang viet chuong trinh loc du lieu tu danh thiep
Minh co 1 van de mong ban giup do :
-Co 1 so danh thiep se khong co day du thong tin ve
uong,Phuong,Quan,Thanh Pho
-Vi the,luc xuat ra report,nhung cho khong co du lieu se la khoang trang
Co cach nao de khi xuat ra report,nhung cho trong do se duoc lap bang du lieu khac.
Vi du : danh thiep khong co Phuong thi ngay tai do,du lieu cua Quan va Thanh Pho duoc di chuyen len de lap day cho trong.
Mong tin ban
Cam on ban da doc tin nay
K.Q
--------------------------------------------------------------------------------
Yahoo! FareChase - Search multiple travel sites in one click.
--------------------------------------------------------------------------------
Xin trả lời như sau:
Chao ban!
Vang, cau hoi cua ban kha hay, lien quan den van de cung kha phuc tap cua access ve chuc nang bao cao. Nhung day cung la nhung diem noi troi cua access de no khac va tot hon nhung loai bao cao khac do la Dinh dang co dieu kien (conditional Format).
Co rat nhieu cach de lam, toi gioi thieu voi ban mot cach nhu sau (Giup ban nang cao kha nang tu duy thuat toan):
Toi xin tra loi nhu sau:
1. Ban vao che do design cua bao cao, hay chon phan details hoac section chua cac textbox de hien thi huyen, xa ...
2. Chon Propertys va chon tab Events tren hop thoai Property.
Tai muc On Format, hay chon combo vao muc [Event Procedure] roi bam nut ben canh.
Day chinh la cach gian tiep de vao code editor.
Ban se thay man hinh VBA hien ra voi thu tuc la
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
End sub
Day chinh la thu tuc duoc thuc thi moi khi bao cao duoc goi va hien thi.
Ban hay dat cac thu tuc cua minh o day. trong do thuc hien cac yeu cau sau:
+ Dat ten nhom text box do la Txt1 cho den 10 (dieu nay de giup ban tham chieu den no mot cach de dang)
+ Kiem tra noi dung cua textbox
+ Neu gia tri la trang thi cho thuoc tinh Height cua no bang 0 vi du
if Txt1.text="" then
txt1.height=0
end if
Tat nhien la luc do khoang trang van con giua textbox vi the ban can phai co mot thuat toan de keo cac texbox len vi tri moi
Txt2.top=txt1.top .... txt10.top =txt9.top ....
Viec nay nen lam bang thuat toan de quy
Ban co thay tham so formatcount khong? Cai nay de giup ta tranh viec thuc hien nhieu lan qua trinh dich chuyen nen toan bo nhom thu tuc can dat trong cau lenh
if formatcount=1 then
....
end if
3. Sau do ban can phai dieu chinh do cao cua detail neu khong lai co khoang trang o cuoi doan bao cao
Detail.height = TotalHeight
trong do bien TotalHeight= tong chieu cao tat ca cac texbox co noi dung.
Toi khong lam giup ban dieu nay, ban hay tu lam va gui cho toi ket qua, toi se comment cho ban.
Tien day toi gui cho ban mot vi du ve cong cu ve Luoi cua Access nhe.
GIan nen ra va chay, Nhan Report, dung nhan re-calculate nua, hay chon mot combo nao do va nhan print - ban se thay access rat manh trong ve luoi giong excel.
THan
--------------------------------------------------------------------------------
Bình luận thêm:
Tất nhiên có nhiều cách để làm được vấn đề trên, và tôi sẽ xin được trình bày từng cách một sau khi nhận được phản hồi của các bạn.
Để bắt đầu, có lẽ chúng ta cần đi qua một số kiến thức như sau:
+ Nguyên tắc hiển thị báo cáo của access như thế nào?
Báo cáo của access là một đối tượng lớp giống như form nhưng các đối tượng con của nó không thể sửa được khi ở chế độ hiển thị preview. Tuy vậy ta vẫn hoàn toàn quy định các thuộc tính của đối tượng đó trong quá trình format:
đầu tiên sự kiện Open của báo cáo được thực thi tiếp theo là các thủ tục liên quan đến section và cuối cùng là details. Sau khi định dạng hết một bản ghi thuộc 1 nhóm, access tiếp tục với bản ghi tiếp theo của nhóm đó cho đến khi hết nhóm thì nhảy sang nhóm tiếp cho đến khi toàn bộ nội dung được duyệt sẵn sàng để in ra màn hình. Lúc này access tiết kiệm tốc độ bằng cách chỉ thực hiện một nhóm thuộc trang đầu rồi chỉ in ra và xử lý với trang tiếp khi ta nhấn nút next.
Quá trình format được chia thành 2 giai đoạn, giai đoạn lấy dữ liệu, định dạng rồi cuối cùng là giai đoạn gửi thông tin để in ra màn hình hoặc máy in (print).
Khi đã đến giai đoạn print thì phần lớn các thuộc tính của các đối tượng là không thể điều chỉnh được nữa.
Vì thế mọi công việc chúng ta cần thực hiện sẽ nằm ở giai đoạn format (chúng ta có thể vẽ đường, định màu, phông chữ và rất nhiều....).
Trong cách của tôi trên đây, về cách tư duy thì không có gì phải bàn nhiều vì cách này khá thẳng (Straight forward). Nhưng tôi muốn nêu lên thực tế sẽ diễn ra khi các bạn thực hiện thành công những bước theo cách trên:
1. Access sẽ hiện thành công một số bản ghi đầu, sau đó là không có gì được hiển thị lên màn hình vì qua các bước tôi đã làm cho kích thước các textbox giảm về 0.
Vậy ta phải ghi nhớ được kích thước thực tế của các đối tượng khi mở báo cáo. Việc này có thể làm tại thủ tục report open(). Sau đó, mỗi khi tiến hành format lại, chúng ta sẽ khôi phục kích thước các đối tượng.
2. Tuy vậy nếu bản ghi thứ nhất có 2 trường có dữ liệu, bản ghi thứ 2 có 5 trường có dữ liệu. Lỗi sẽ phát sinh do kích thước Section details đã bị thu bé ở lần hiển thị bản ghi đầu tiên, vì thế ta lại phải khôi phục lại kích thước ban đầu của section này ngay khi bắt đầu format từng bản ghi..
3. Với bản ghi trẳng? Đơn giản chỉ cần đặt các đối tượng về kích thước o cũng như Details.
Và kết thúc ... hihi
Để tiện theo dõi, các bạn có thể xem ví dụ ở
http://www.sfdp.net/Libs/gen/acc/report1.zip
Đến đây thì em xin mạn phép kết thúc bài 1. Nếu có gì không phải mong các bác lượng thứ ạ.
Nay kính thư nhé!
Những nội dung mà tôi dự định trao đổi sẽ ít nhiều bao gồm tất cả các kỹ năng liên quan đến 4 ứng dụng chính của Office đó là Excel, Access, Word và Powerpoint.
Để tránh sự thụ động trong việc đưa ra nội dung, tôi xin phép được lấy căn cứ ví dụ làm nền tảng cho các thảo luận. Cấu trúc cơ bản của phần này sẽ là:
+ Mỗi tuần sẽ có 1 ví dụ đặc trưng nhất trong bộ công cụ mà tôi hiện có. Tại ví dụ tôi sẽ trình bày khả năng áp dụng các thuật toán vào công việc hàng ngày của các bạn.
+ Nếu khả năng cho phép, tôi sẽ trả lời tất cả các câu hỏi của các bạn liên quan đến ví dụ hoặc các nội dung có tính chất tương đối gần với chủ đề đã trình bày.
+ Những thông tin tôi nhận được từ các email cũng sẽ được đưa ra chủ đề này để mọi người tiện theo dõi.
Tôi thực sự hy vọng chúng ta sẽ cùng hỗ trợ nhau để nâng cao hiệu quả công việc từ những kinh nghiệm được chia sẻ.
Để bắt đầu chủ đề,.... tôi xin được bắt đầu với ví dụ đầu tiên về Access với chức năng báo cáo thật mạnh mẽ của nó trước các đối thủ nặng ký là Crystal Report hoặc active report ...
[========================================================]
Tôi nhận được 1 câu hỏi từ thành viên của ddth như sau: (Xin phép được
----- Original Message -----
From: khanh quang
Sent: Wednesday, November 16, 2005 3:13 PM
Subject: Minh muon hoi ve access
Hi!
Minh moi ra truong nen voi lap trinh access con bo ngo lam
Hien tai,minh dang viet chuong trinh loc du lieu tu danh thiep
Minh co 1 van de mong ban giup do :
-Co 1 so danh thiep se khong co day du thong tin ve
-Vi the,luc xuat ra report,nhung cho khong co du lieu se la khoang trang
Co cach nao de khi xuat ra report,nhung cho trong do se duoc lap bang du lieu khac.
Vi du : danh thiep khong co Phuong thi ngay tai do,du lieu cua Quan va Thanh Pho duoc di chuyen len de lap day cho trong.
Mong tin ban
Cam on ban da doc tin nay
K.Q
--------------------------------------------------------------------------------
Yahoo! FareChase - Search multiple travel sites in one click.
--------------------------------------------------------------------------------
Xin trả lời như sau:
Chao ban!
Vang, cau hoi cua ban kha hay, lien quan den van de cung kha phuc tap cua access ve chuc nang bao cao. Nhung day cung la nhung diem noi troi cua access de no khac va tot hon nhung loai bao cao khac do la Dinh dang co dieu kien (conditional Format).
Co rat nhieu cach de lam, toi gioi thieu voi ban mot cach nhu sau (Giup ban nang cao kha nang tu duy thuat toan):
Toi xin tra loi nhu sau:
1. Ban vao che do design cua bao cao, hay chon phan details hoac section chua cac textbox de hien thi huyen, xa ...
2. Chon Propertys va chon tab Events tren hop thoai Property.
Tai muc On Format, hay chon combo vao muc [Event Procedure] roi bam nut ben canh.
Day chinh la cach gian tiep de vao code editor.
Ban se thay man hinh VBA hien ra voi thu tuc la
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
End sub
Day chinh la thu tuc duoc thuc thi moi khi bao cao duoc goi va hien thi.
Ban hay dat cac thu tuc cua minh o day. trong do thuc hien cac yeu cau sau:
+ Dat ten nhom text box do la Txt1 cho den 10 (dieu nay de giup ban tham chieu den no mot cach de dang)
+ Kiem tra noi dung cua textbox
+ Neu gia tri la trang thi cho thuoc tinh Height cua no bang 0 vi du
if Txt1.text="" then
txt1.height=0
end if
Tat nhien la luc do khoang trang van con giua textbox vi the ban can phai co mot thuat toan de keo cac texbox len vi tri moi
Txt2.top=txt1.top .... txt10.top =txt9.top ....
Viec nay nen lam bang thuat toan de quy
Ban co thay tham so formatcount khong? Cai nay de giup ta tranh viec thuc hien nhieu lan qua trinh dich chuyen nen toan bo nhom thu tuc can dat trong cau lenh
if formatcount=1 then
....
end if
3. Sau do ban can phai dieu chinh do cao cua detail neu khong lai co khoang trang o cuoi doan bao cao
Detail.height = TotalHeight
trong do bien TotalHeight= tong chieu cao tat ca cac texbox co noi dung.
Toi khong lam giup ban dieu nay, ban hay tu lam va gui cho toi ket qua, toi se comment cho ban.
Tien day toi gui cho ban mot vi du ve cong cu ve Luoi cua Access nhe.
GIan nen ra va chay, Nhan Report, dung nhan re-calculate nua, hay chon mot combo nao do va nhan print - ban se thay access rat manh trong ve luoi giong excel.
THan
--------------------------------------------------------------------------------
Bình luận thêm:
Tất nhiên có nhiều cách để làm được vấn đề trên, và tôi sẽ xin được trình bày từng cách một sau khi nhận được phản hồi của các bạn.
Để bắt đầu, có lẽ chúng ta cần đi qua một số kiến thức như sau:
+ Nguyên tắc hiển thị báo cáo của access như thế nào?
Báo cáo của access là một đối tượng lớp giống như form nhưng các đối tượng con của nó không thể sửa được khi ở chế độ hiển thị preview. Tuy vậy ta vẫn hoàn toàn quy định các thuộc tính của đối tượng đó trong quá trình format:
đầu tiên sự kiện Open của báo cáo được thực thi tiếp theo là các thủ tục liên quan đến section và cuối cùng là details. Sau khi định dạng hết một bản ghi thuộc 1 nhóm, access tiếp tục với bản ghi tiếp theo của nhóm đó cho đến khi hết nhóm thì nhảy sang nhóm tiếp cho đến khi toàn bộ nội dung được duyệt sẵn sàng để in ra màn hình. Lúc này access tiết kiệm tốc độ bằng cách chỉ thực hiện một nhóm thuộc trang đầu rồi chỉ in ra và xử lý với trang tiếp khi ta nhấn nút next.
Quá trình format được chia thành 2 giai đoạn, giai đoạn lấy dữ liệu, định dạng rồi cuối cùng là giai đoạn gửi thông tin để in ra màn hình hoặc máy in (print).
Khi đã đến giai đoạn print thì phần lớn các thuộc tính của các đối tượng là không thể điều chỉnh được nữa.
Vì thế mọi công việc chúng ta cần thực hiện sẽ nằm ở giai đoạn format (chúng ta có thể vẽ đường, định màu, phông chữ và rất nhiều....).
Trong cách của tôi trên đây, về cách tư duy thì không có gì phải bàn nhiều vì cách này khá thẳng (Straight forward). Nhưng tôi muốn nêu lên thực tế sẽ diễn ra khi các bạn thực hiện thành công những bước theo cách trên:
1. Access sẽ hiện thành công một số bản ghi đầu, sau đó là không có gì được hiển thị lên màn hình vì qua các bước tôi đã làm cho kích thước các textbox giảm về 0.
Vậy ta phải ghi nhớ được kích thước thực tế của các đối tượng khi mở báo cáo. Việc này có thể làm tại thủ tục report open(). Sau đó, mỗi khi tiến hành format lại, chúng ta sẽ khôi phục kích thước các đối tượng.
2. Tuy vậy nếu bản ghi thứ nhất có 2 trường có dữ liệu, bản ghi thứ 2 có 5 trường có dữ liệu. Lỗi sẽ phát sinh do kích thước Section details đã bị thu bé ở lần hiển thị bản ghi đầu tiên, vì thế ta lại phải khôi phục lại kích thước ban đầu của section này ngay khi bắt đầu format từng bản ghi..
3. Với bản ghi trẳng? Đơn giản chỉ cần đặt các đối tượng về kích thước o cũng như Details.
Và kết thúc ... hihi
Để tiện theo dõi, các bạn có thể xem ví dụ ở
http://www.sfdp.net/Libs/gen/acc/report1.zip
Đến đây thì em xin mạn phép kết thúc bài 1. Nếu có gì không phải mong các bác lượng thứ ạ.
Nay kính thư nhé!
Sửa lần cuối: