***** CẬP NHẬT - v2.44 *****
Cập nhật 2.42 sửa một số lỗi trong mã và tăng tốc giãn dòng bằng cách giãn đồng thời các ô giá trị cùng cột
Và thêm các hàm bổ trợ giãn dòng cho Bảng để tiết kiệm hơn trong quá trình giãn dòng, với hàm bổ trợ fit_Tables()
Dự kiến bản cập nhật tiếp theo
Hôm nay tôi lại chia sẻ cho các bạn một Hàm VBA UDF có chức năng tự động co giãn dòng khi giá trị trong bảng tính thay đổi, thì quá trình co giãn dòng cũng tự động thay đổi theo.
Tôi quyết định viết code này bỡi vì trên diễn đàn có nhiều bài viết hỏi về co giãn dòng tự động, và khi tôi đọc qua các bài viết đó thì không thấy ai có thể xử lý vấn đề triệt để, hoặc là code chưa tối ưu, hoặc code chưa xử lý được nhiều vùng đã gộp cùng dòng.
Và hàm UDF là một cách tối ưu nhất giúp các bạn không phải code lại, mà chỉ cần viết Hàm như một hàm Excel bình thường để thực hiện tác vụ co giãn dòng.
HÀM FITROW - TỰ ĐỘNG GIÃN DÒNG
Chức năng của hàm:
Hướng dẫn sử dụng hàm:
Hàm FITROW có 2 chế độ, là tạo nút nhấn để dùng tay và tự động chạy.
Nếu nhập hàm mà có nhập thêm bổ trợ fit_Auto() thì hàm nhập tự động chạy, khi giá trị tham chiếu thay đổi.
Nếu không sẽ tạo nút nhấn, để nhấn giãn dòng.
Hàm FITROW được viết theo phương pháp mới nên cách nhập đối số là gõ hàm như dưới đây:
Hàm bỗ trợ fit_Indexes cho hàm FitRow hoạt động như sau:
Ảnh 1 và ảnh 2:
CÁC HÀM LỆNH TẠO NÚT VÀ BIỂU THỨC NHANH:
Các hàm Bổ trợ:
****Lưu ý:
***Sao chép mã vào dự án của bạn phải bao gồm 1 module + mã trong ThisWorkbook
--------------------------------------------------------------------------------------
Liên hệ Facebook Messenger: Vo Truong Anh Tuan
Liên hệ Zalo: 0384170514
Quét QRCode Zalo:
Cập nhật 2.42 sửa một số lỗi trong mã và tăng tốc giãn dòng bằng cách giãn đồng thời các ô giá trị cùng cột
Và thêm các hàm bổ trợ giãn dòng cho Bảng để tiết kiệm hơn trong quá trình giãn dòng, với hàm bổ trợ fit_Tables()
Dự kiến bản cập nhật tiếp theo
Thêm hàm chức năng bổ trợ giãn dòng trước khi in.
-------------------------------------------------------------------Hôm nay tôi lại chia sẻ cho các bạn một Hàm VBA UDF có chức năng tự động co giãn dòng khi giá trị trong bảng tính thay đổi, thì quá trình co giãn dòng cũng tự động thay đổi theo.
Tôi quyết định viết code này bỡi vì trên diễn đàn có nhiều bài viết hỏi về co giãn dòng tự động, và khi tôi đọc qua các bài viết đó thì không thấy ai có thể xử lý vấn đề triệt để, hoặc là code chưa tối ưu, hoặc code chưa xử lý được nhiều vùng đã gộp cùng dòng.
Và hàm UDF là một cách tối ưu nhất giúp các bạn không phải code lại, mà chỉ cần viết Hàm như một hàm Excel bình thường để thực hiện tác vụ co giãn dòng.
HÀM FITROW - TỰ ĐỘNG GIÃN DÒNG
Chức năng của hàm:
- Co giãn dòng hoàn toàn tự động.
- Co giãn dòng kể cả các ô đã được gộp.
- Co giãn dòng với các giá trị nhiều ô gộp cùng dòng.
- Co giãn dòng kể cả chiều cao vượt giới hạn của Excel là 409.5
- Hoạt động cả ở chế độ Xem In Ấn.
- Thêm chiều cao nhất định cho dòng đã giãn.
- Đặt chiều cao mặc định cho vùng trống.
- Đặt chiều cao mặc định cho dòng trống.
- Tự đặt tỉ lệ giãn chiều rộng, chiều cao và thụt đầu dòng, khi chiều cao dòng vượt giới hạn.
- Vì dùng hàm UDF nên rất tối ưu, tiết kiệm CPU.
- Chỉ cần gõ một biểu thức FITROW cho cả vùng cần co giãn.
- Tự động dịch chuyển lề trên hoặc lề dưới của trang để chỉ mục nằm vị trí tốt nhất để in ấn.
- Đã tạo Add-in cho hàm giãn dòng, thêm phím tắt giãn dòng CTRL+SHIFT+ALT+R.
- Thay đổi giải thuật giãn dòng chính xác hơn.
- Cách viết hàm khác hoàn toàn so với trước, đối số nhập vào phải là một hàm.
- Giãn dòng kể cả ô vượt giới hạn 409.5 đơn vị chiều cao ô Excel.
- Giãn dòng biên bản tự động dịch chuyển và canh trang để chỉ mục không bị trồi lên hoặc thụt xuống trang khác.
- Chỉ cần gõ 1 biểu thức FITROW duy nhất cho cả vùng ô cần giãn dòng.
- Có hai phiên bản ứng dụng của hàm FITROW:
- Mã viết trong 1 module duy nhất (tốn kém bộ nhớ khi ứng dụng hoạt động).
- Sử dụng mã trong Classes (tiết kiệm bộ nhớ).
Hướng dẫn sử dụng hàm:
Hàm FITROW có 2 chế độ, là tạo nút nhấn để dùng tay và tự động chạy.
Nếu nhập hàm mà có nhập thêm bổ trợ fit_Auto() thì hàm nhập tự động chạy, khi giá trị tham chiếu thay đổi.
Nếu không sẽ tạo nút nhấn, để nhấn giãn dòng.
Hàm FITROW được viết theo phương pháp mới nên cách nhập đối số là gõ hàm như dưới đây:
Hàm cài đặt và bổ trợ | Kiểu | Chức năng |
---|---|---|
fit_Padding(Height) | Số | Tăng chiều cao thêm một số |
fit_defaultHeight(Height) | Số | Chiều cao mặc định nếu giá trị rỗng, dễ hiểu, nếu co giãn vùng ô A1:C20, mà cả vùng đó rỗng, thì chỉnh về chiều cao mặc định. |
fit_HeightOfRowNull(Height) | Số | Đặt chiều cao mặc định cho cả dòng rỗng (giãn vùng A1:Z20, dòng A2:Z2 rỗng) |
fit_AllSheets() | Có | Giãn dòng kể cả vùng ở trang tính không hiện hành. |
fit_Auto() | Có | Bật tự động Fit khi ô tham chiếu thay đổi giá trị Vì hàm FITROW có thể chạy bất kỳ khi nào gây tốn kém, mất thời gian khi các hàm nhạy như ToDay, Now, Rand, RandBetween, ... nằm cùng trang tính. Nên cần hàm bổ trợ này. |
fit_Tables(table, ....) | Vùng ô | Nhập một vùng dữ liệu kiểu bảng để tiết kiệm thời gian giãn dòng |
fit_Indexes(cell1,cell2,...) | Vùng chứa nhóm văn bản | Căn chỉnh biên bản ở chế độ PrintView, khi giãn dòng, chiều cao trang in có thể cao hơn hoặc thấp hơn, làm cho trang in bị xê dịch, nên cần điều chỉnh để phù hợp. |
fit_Scale(scaleWidth,scaleHeight,indentWidth) | Đặt tỉ lệ giãn chiều rộng, chiều cao và thụt đầu dòng, khi chiều cao dòng vượt giới hạn | Vì khi giãn dòng, sẽ có sai số độ lệch nhất định nên cần đặt thông số này. Thông số tỉ lệ chiều rộng và cao quyết định độ chính xác khi giãn dòng. Cho ô chiều cao vượt giới hạn. Và ô gộp có nhiều cột. Ví dụ: Đặt ScaleWidth = 0.0245 hiểu là tăng độ rộng ban đầu 1 * 0.0245 để thực hiện fit. Đặt ScaleHeight = 0.0145 hiểu là tăng thêm chiều cao sau khi fit là 1 * 0.0145 để đặt cho dòng. |
Viết hàm nhanh: =FITROW(A2:F1000)
Viết hàm có cài đặt đối số: =FITROW(A2:F1000,fit_defaultHeight(40),fit_Padding(5))
Cách nhập nhiều vùng cần co giãn dòng:
=FITROW(A1:C9,D2:F3,E5:E6)
Ví dụ: giãn dòng A1 và đối số, gõ =FITROW(A1,fit_Padding(5))
Các hàm với các ký tự đầu là fit_... Chính là các hàm cài đặt và bổ trợ cho hàm chính FITROW
Ví dụ: gõ =FITROW(A1,B4,C5), sẽ co giãn các ô A1, B4, C5, các cài đặt là mặc định
Hàm bỗ trợ fit_Indexes cho hàm FitRow hoạt động như sau:
Hãy xem ảnh minh họa 1 bên dưới, các bạn sẽ thấy lề dưới canh trang mục 4.2 có vùng bảng dữ liệu được tự động chuyển xuống trang mới, lúc này in ra sẽ hoàn hảo. Nhưng nếu mục 4.2 bị dịch lên trên trang trên như hình ảnh thứ 2 thì làm cho trang in khó đọc và không tích hợp để xem.
Chính vì vậy sự bổ trợ của fit_Indexes sẽ giúp khắc phục điều này, mã sẽ chạy để dịch chuyển vùng đã đặt lên xuống sao cho trang in phù hợp.
Ví dụ nếu mục 4.2 bắt đầu từ A100 và hết bảng dữ liệu Z110 thì nhập fit_Indexes vào hàm FitRow là fit_Indexes(A100:Z110)
Và nhập nhiều vùng fit_Indexes(A100:Z110,A115:Z120)
Ảnh 1 và ảnh 2:
CÁC HÀM LỆNH TẠO NÚT VÀ BIỂU THỨC NHANH:
HÀM | Chức năng |
=FITROW_AddFX() | Tạo nhanh biểu thức FITROW vào ô |
=FITROW_AddFXPrintArea() | Tạo nhanh biểu thức FITROW vùng in vào ô, nếu đang ở trang tính đã đặt vùng in |
=FITROW_AddButton() | Tạo nút nhấn để giãn dòng |
=FITROW_AddButtonPrintArea() | Tạo nút nhấn để giãn dòng vùng in, nếu đang ở trang tính đã đặt vùng in |
=FitRow_Off() | Tắt chế độ tự động giãn dòng |
=FitRow_On() | Bật chế độ tự động giãn dòng |
Phím tắt giãn dòng: CTRL+SHIFT+ALT+RCác hàm Bổ trợ:
1. Gõ hàm FITROW_OFF: nếu đang chỉnh sửa trang tính hãy tắt chế độ co giãn dòng hoặc bật chế độ Design Mode trong Tab Developer.
2. Gõ hàm FITROW_ON: Bật chế độ co giãn dòng tự động.
3. Thủ tục FITROW_Toggle + Check box có tên là chxAutoFitRow dùng để bật tắt chế độ co giãn dòng nếu muốn (Ví dụ nằm ở Sheet1 trong tập tin đính kèm bên dưới).
Bước 3 này là một thủ thuật để ngăn chặn code tính toán lúc ứng dụng vừa khởi động, vì có thể sẽ gặp phải tình trạng code sẽ làm chậm quá trình khởi động.
Hãy để dòng code sau vào sự kiện Workbook_Open: Call FITROW_Off
Hãy mở lại bằng bước 2 hoặc bước 3.
****Lưu ý:
- Code sẽ tạo trang tính ẩn có tên __CELLFIXING__ để giãn dòng.
- Khi giãn dòng tự động chế độ Undo và Redo của trang tính sẽ không hoạt động.
- Nếu trong trang tính có hàm giãn dòng, khi sử dụng hàm nhạy như RandBetween, ToDay, Now,... và các hàm random, thì không thêm hàm bổ trợ tự động chạy fit_Auto().
***Sao chép mã vào dự án của bạn phải bao gồm 1 module + mã trong ThisWorkbook
--------------------------------------------------------------------------------------
Liên hệ Facebook Messenger: Vo Truong Anh Tuan
Liên hệ Zalo: 0384170514
Quét QRCode Zalo:
File đính kèm
Lần chỉnh sửa cuối: