Làm sao tạo macro in theo điều kiện

Liên hệ QC

hoangduy_90

Thành viên mới
Tham gia
7/8/08
Bài viết
14
Được thích
0
Các bạn cho mình hỏi 1 vấn đế như sau: mình có 10 vùng dữ liệu ứng với 10 trang A4. Ban đầu dữ liệu 10 vùng đều rỗng, sau khi liên kết với các sheet khác thì có thể các vùng liên tiếp nhau như 1,2,3 (hoặc 1,2,3,4,5) có dữ liệu, các vùng còn lại không có. Vậy cần tạo macro như thế nào để khi click nút lệnh in (nút lệnh này mình tự tạo) thì excel sẽ chỉ in những vùng có dữ liệu, không in vùng rỗng? (macro này tạo trước khi các vùng có dữ liệu). Mong các bạn chỉ giúp. Cảm ơn các bạn.
 
Bạn dùng có thể thực hiện như sau :
+ Dùng sự kiện Workbook_BeforePrint
+ Trước khi in cho nó kiểm tra, nếu vùng nào có dữ liệu thì cho in và ngược lại
Như vậy bạn không cần tạo nút in nào khác mà bạn sử dụng nút in sẵn có của Excel

TDN
 
Upvote 0
Cảm ơn bạn TDN nhiều lắm. Bạn có thể viết hộ hình code được không? Xin cảm ơn bạn lần nữa.
 
Upvote 0
Bạn dùng có thể thực hiện như sau :
+ Dùng sự kiện Workbook_BeforePrint
+ Trước khi in cho nó kiểm tra, nếu vùng nào có dữ liệu thì cho in và ngược lại
Như vậy bạn không cần tạo nút in nào khác mà bạn sử dụng nút in sẵn có của Excel

TDN

Dùng sự kiện Workbook_BeforePrint như thế nào nhỉ (đặt ở đâu trong code). Mình đã thử nhưng không được, rất mong Bạn viết cho một sub ví dụ. Thanks !
 
Upvote 0
Dùng sự kiện Workbook_BeforePrint như thế nào nhỉ (đặt ở đâu trong code). Mình đã thử nhưng không được, rất mong Bạn viết cho một sub ví dụ. Thanks !
Đã là Workbook_BeforePrint thì đương nhiên nó nằm trong ThisWorkBook rồi ---> Anh xem hình này:

attachment.php
 

File đính kèm

  • untitled.JPG
    untitled.JPG
    48.4 KB · Đọc: 168
Upvote 0
Cảm ơn bạn TDN nhiều lắm. Bạn có thể viết hộ hình code được không? Xin cảm ơn bạn lần nữa.
Cũng có nhiều cách viết. Đây là 1 ví dụ :
PHP:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Rng As String
    If WorksheetFunction.CountA(Range("B2:C6")) > 0 Then Rng = "B2:C6"
    If WorksheetFunction.CountA(Range("B9:C14")) > 0 Then _
          Rng = Rng & IIf(Rng = "", "", ",") & "B9:C14"
    If WorksheetFunction.CountA(Range("B17:C22")) > 0 Then _
          Rng = Rng & IIf(Rng = "", "", ",") & "B17:C22"
    If Rng = "" Then Cancel = True Else ActiveSheet.PageSetup.PrintArea = Rng
End Sub
Bạn có thể thay đổi cho phù hợp

TDN
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Còn 1 cách khác cũng khá đơn giản: Tạo name động Print_Area với điều kiện nào đó (tùy theo tính toán của bạn) ---> Khi ấy name Print_Area sẽ tự động thay đổi tham chiếu và ta chỉ có mổi việc bấm nút in mà không cần viết bất cứ code nào

attachment.php
 

File đính kèm

  • untitled.JPG
    untitled.JPG
    34.6 KB · Đọc: 164
Upvote 0
Còn 1 cách khác cũng khá đơn giản: Tạo name động Print_Area với điều kiện nào đó (tùy theo tính toán của bạn) ---> Khi ấy name Print_Area sẽ tự động thay đổi tham chiếu và ta chỉ có mổi việc bấm nút in mà không cần viết bất cứ code nào
Lúc đầu cũng nghĩ theo hướng này nhưng không biết đặt công thức như thế nào cho name Print_Area. Vì giả sử vùng có điều kiện thì Print_Area là địa chỉ vùng nhưng nếu tất cả không có dữ liệu thì không có vùng nào được chọn làm Print_Area và khi đó Print_Area= "" ; Lúc này Excel lại cho in tất cả.

TDN
 
Upvote 0
Lúc đầu cũng nghĩ theo hướng này nhưng không biết đặt công thức như thế nào cho name Print_Area. Vì giả sử vùng có điều kiện thì Print_Area là địa chỉ vùng nhưng nếu tất cả không có dữ liệu thì không có vùng nào được chọn làm Print_Area và khi đó Print_Area= "" ; Lúc này Excel lại cho in tất cả.

TDN
cái này cũng có lý nhưng nghĩ kỹ lại thấy.. hơi buồn cười, vì lý nào ta đã "nhìn" thấy chẳng có tí dử liệu nào mà lại cứ bấm Print
???
Ẹc... Ẹc...
Còn công thức viết ra sao thì phải xem dử liệu chi tiết mới biết được!
 
Upvote 0
cái này cũng có lý nhưng nghĩ kỹ lại thấy.. hơi buồn cười, vì lý nào ta đã "nhìn" thấy chẳng có tí dử liệu nào mà lại cứ bấm Print
???
Ẹc... Ẹc...
Còn công thức viết ra sao thì phải xem dử liệu chi tiết mới biết được!
Thật ra cũng chưa hẳn vậy đâu anh à, Giả sử cột A và B có dữ liệu nhưng vùng cần in và kiểm tra có dữ liệu hay không lại là từ cột C trở đi. Như vậy, nếu cốt C trở đi không có dữ liệu thì lẽ ra không in mặc dù vẫn nhìn thấy dữ liệu ở cột A và B, hi hi
Tuy nhiên, như anh nói : "phải xem dử liệu chi tiết mới biết được"

TDN
 
Upvote 0
Bạn TDN ơi! Mình đã thử code của bạn và in được 5 trang đầu thì rất tốt nhưng sheet của mình tới 60 trang, khi mình tạo 60 cái If ứng với 60 trang thì in không được. Bạn giúp mình nhé. Cảm ơn bạn nhiều lắm.
 
Upvote 0
Bạn TDN ơi! Mình đã thử code của bạn và in được 5 trang đầu thì rất tốt nhưng sheet của mình tới 60 trang, khi mình tạo 60 cái If ứng với 60 trang thì in không được. Bạn giúp mình nhé. Cảm ơn bạn nhiều lắm.
Thật sự chư bao giờ mình dùng tới 10 "cái IF" huống chi là 60. Hi hi
Vậy nếu gặp lỗi, bạn thử cách sau xem có được không : bạn kiểm tra vùng in, nếu thoả điều kiện thì cho in theo chế độ Selection vùng đó ; và cứ như vậy cho đến hết...

TDN
 
Upvote 0
Thật sự chư bao giờ mình dùng tới 10 "cái IF" huống chi là 60. Hi hi
Vậy nếu gặp lỗi, bạn thử cách sau xem có được không : bạn kiểm tra vùng in, nếu thoả điều kiện thì cho in theo chế độ Selection vùng đó ; và cứ như vậy cho đến hết...

TDN
Cảm ơn bạn TDN nhé. Mình sẽ thử lại.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom