Access Report

Tạo đường kẻ dọc co dãn được trên báo biểu (report)

15/08/2013 16:38

Khi thiết kế report, đường kẻ (Line) không hề có thuộc tính Can Grow và Can Shrink để co dãn kích thước như đối tượng Text Box và Detail Section. Làm thế nào bây giờ?

Có một sự khác biệt thật thú vị mà tôi nhận thấy giữa những báo cáo của các công ty nước ngoài và những báo cáo của các công ty trong nước là: công ty nước ngoài không cần sử dụng đường kẻ dọc để phân cách các cột số liệu cạnh nhau, trong khi điều này thường là bắt buộc (như hình 1) đối với các công ty trong nước.

Có lẽ chính vì vậy mà Microsoft không chú tâm lắm đến tính năng co dãn của đường kẻ dọc mỗi khi phần chi tiết (Detail Section) chứa nó (đường kẻ dọc) thay đổi kích thước (do nội dung lúc nhiều lúc ít). Trong các thuộc tính của đường kẻ (Line), không hề tìm thấy thuộc tính Can GrowCan Shrink như đối tượng Text BoxDetail Section.

Cũng “… may mà có em, đời còn dễ thương…” (sướng quá nên tôi chợt nhớ đến bài hát Còn chút gì để nhớ, thơ Vũ Huy Định, nhạc Phạm Duy), em ở đây chính là hàm Line của VBA để vẽ đường thẳng hoặc hình chữ nhật. Đấy thật sự là cảm giác của tôi khi tìm đượcchỉ dẫn (mặc dù chỉ sơ sài) của Microsoft về vấn đề này.

Để minh họa, tôi sử dụng tập tin cơ sở dữ liệu mẫu Northwind.MDB được cung cấp sẵn trong thư mục C:\Program Files\Microsoft Office\OFFICE11\SAMPLES khi cài đặt Microsoft Access 2003.

· Bạn hãy mở tập tin này ra, rồi tạo một report với Record Source là bảng Customers và không sử dụng wizard.

· Click vào biểu tượng Field List trên tool bar rồi kéo thả fieldCompanyName vào phần Detail. Đặt thuộc tính Can GrowCan Shrink của fieldCompanyName và phần DetailYes.

· Vẽ 2 đường kẻ dọc (có bề cao bằng nhau) ở hai bên text boxCompanyName như hình 2. Vẽ thêm một đường kẻ ngang nối 2 đỉnh của 2 đường kẻ dọc. Rồi đặt thuộc tính Top của các đường kẻ bằng 0 để bảo đảm chúng được vẽ ngay đầu phần Detail.

· Bạn click vào biểu tượng Print Preview trên tool bar để xem kết quả hiển thị như hình 3. Bạn để ý phần tôi khoanh tròn màu đỏ: nội dung hiển thị text box thì dãn ra, nhưng kích thước đường kẻ vẫn không đổi, tạo ra nét ngắt quãng.

· Click vào phần Detail, mở cửa sổ Properties, chọn phân trang Event, rồi chọn Event Procedure cho tình huống On Print và gõ đoạn mã sau đây vào thủ tục Detail_Print:

Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)

Dim X1 As Single, Y1 As Single

Dim X2 As Single, Y2 As Single

Dim Color As Long, I As Byte

' Đơn vị đo trên các trục tọa độ của trang

Me.ScaleMode = 5 ' Chọn inch làm đơn vị đo

' 10 pixel = 1pt thuoc tinh BorderWidth cua Line

Me.DrawWidth = 10 ' Nét vẽ (bằng pixels). Đừng sử dụng các số lẻ.

Color = RGB(0, 0, 0) ' Màu vẽ là đen

'---------------------------------------------------------

' Đường thẳng được kẻ từ TOP của phần detail

' có bề cao tối đa là 22 inches

'---------------------------------------------------------

Y1 = 0

Y2 = 22

' X1=X2, tọa độ tính từ lề trái, đơn vị inch

For I = 1 To 2

Select Case I ' Vẽ đường kẻ thứ I

Case 1

X1 = 0.2083

Case 2

X1 = 1.4167

End Select

X2 = X1

Me.Line (X1, Y1)-(X2, Y2), Color

Next

End Sub

Bạn click vào biểu tượng Print Preview trên tool bar để xem kết quả hiển thị như hình 4.

• Nhận xét:

· Đơn vị đo tọa độ các điểm trên trang report lúc thiết kế luôn luôn là inch, nên bạn phải gán trị cho thuộc tính ScaleMode là 5 trong VBA. Trong khi đó, bề dày của nét vẽ (thuộc tính DrawWidth) khi thiết kế reportpt (point) nhưng khi dùng trong VBA lại là pixel. Để vẽ một đường kẻ có bề dày nét vẽ là 1 pt trên report, bạn có thể gán trị 10 pixel (tôi ước chừng như vậy vì chưa biết hàm nào cho phép đổi đơn vị từ pt sang pixel) cho thuộc tính DrawWidth trong VBA.

· Vì là đường kẻ dọc, nên tọa độ X1 và X2 bằng nhau. Tọa độ X chính là giá trị thuộc tính Left của đường kẻ lúc thiết kế report (trong ví dụ này lần lượt là 0.2083 inch và 1.4167 inch), cho nên bạn chỉ cần click vào đường kẻ rồi sao chép nó từ cửa sổ Properties. Tọa độ Y1 là 0 để bảo đảm đường kẻ bắt đầu từ đỉnh phần Detail. Thế thì tại sao tọa độ Y2 lại luôn luôn là 22 ?

Phần Detail của một report có thể co dãn để thay đổi kích thước, bạn có thể gán cho tọa độ Y2 một giá trị lớn hơn bề cao tối đa thực sự cần thiết cho phần Detail, vì thế đường kẻ dọc sẽ chẳng khi nào ngắn hơn bề cao thực sự của phần Detail.

Microsoft Access khống chế chiều cao của một control hoặc một section trên report là 22 inch. Nếu cố tình gán cho tọa độ Y2 một giá trị lớn hơn 22, bạn chẳng bao giờ vẽ được đường kẻ. Bạn cứ thử thì biết.

· Hai đường kẻ dọc ở hai bên text boxCompanyName mà ta vẽ bằng tay như trong hình 2 chỉ là phương tiện để ta xác định (bằng mắt) bề rộng cần thiết của cột dữ liệu, từ đó xác định được tọa độ X1 cần gán bằng VBA. Bây giờ, bạn thử xóa 2 đường kẻ này đi rồi click vào biểu tượng Print Preview trên tool bar thì vẫn nhận được kết quả hiển thị như trong hình 4.

Đàm Văn Chương
Ý kiến bạn đọc (0)
Tên   Email

Lên đầu trang