AfterPrint & AfterSave? Excel thiếu. Xin bổ sung? (1 người xem)

  • Thread starter Thread starter pmhoang
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

pmhoang

Thành viên thường trực
Tham gia
4/7/08
Bài viết
269
Được thích
83
Trong ThisWorkbook có các Sub mặc định của Excel VD:
Workbook_BeforeSave(...)
Workbook_BeforePrint(...)

Nhưng không có: Workbook_AfterSave(...) & Workbook_AfterPrint(...)???

Mình muốn.
1. Ở sheet1 ấn nút Save thì Code làm nhảy qua Sheet2 và save. (BeforeSave)
Sau khi Save xong thì nhảy lại Sheet1 như cũ. (AfterSave)
(Nếu làm thành công thi khi mở file lên sẽ thấy SheetActivate là Sheet2 - Vì khi Save là Sheet2 Activate)

2. Ở sheet1 ấn nút Print Preview thì Code ẩn 3 Cột B,C,D và view (BeforePrint)
Sau khi close Print Preview hay là Print xong thì mở ẩn cho hiện lại 3 cột trên. (AfterPrint)

Mình làm hoài mà không được mong các bạn giúp với. Nếu được thì đây cũng là 2 Sub hay để cho mọi người áp dụng. Thanks
 
Lần chỉnh sửa cuối:
Mình đã dựa vào ý tưởng của bạn để viết Code này. Nhưng nó hoạt động không như ý muốn, nó không thể nào Printview được, không hiểu tại sao? Mong các bạn giúp.
PHP:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
  MsgBox "Truoc khi Print, to mau xanh"
  Range("B2:D15").Interior.ColorIndex = 4
  
  Cancel = True
  ActiveWindow.SelectedSheets.PrintPreview
  
  MsgBox "Sau khi Print, to mau trang tro lai"
  Range("B2:D15").Interior.ColorIndex = xlNone
End Sub
Bạn nên đặt lệnh Cancel về cuối, sau khi đã thực hiện hết các thao tác bên trên. Vì trong số các câu lệnh của bạn lại có lệnh gọi đến PrintPreview nên sự kiện này lại được kích hoạt. Bạn có thể dùng thêm thuộc tính EnabledEvent của Application để kiểm soát. Ví dụ code của bạn có thể sửa lại 1 chút thế này.
Mã:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Application.EnableEvents = False
    
    MsgBox "Truoc khi Print, to mau xanh"
    Range("B2:D15").Interior.ColorIndex = 4
    
    ActiveWindow.SelectedSheets.PrintPreview
    
    MsgBox "Sau khi Print, to mau trang tro lai"
    Range("B2:D15").Interior.ColorIndex = xlNone
    
    Application.EnableEvents = True
    
    Cancel = True
End Sub
 
Upvote 0
Bạn có thể dùng thêm thuộc tính EnabledEvent của Application để kiểm soát.
1. Code của bạn Run rất OK, Có 1 điều là khi đó ấn nút File/Print không hiện ra bảng Print nữa mà hiện lên Printview luôn.

2. Tương tự Print ta viết cho Save thỏa mãn đk luôn luôn Save ở Sheet2
3. Save xong Activate Sheet lúc trước thì chưa làm được (tổng quát)???
VD: Đang làm việc ở Sheet ABC, Ấn nút Save sẽ save ở Sheet2, Save xong lại chuyển về Sheet ABC (Tổng quát thì chưa biết cách làm, đo ko biêt lệnh tìm tên Sheet hiện hành)
PHP:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Application.EnableEvents = False
    
    Sheets("sheet2").Activate
    MsgBox "Truoc khi Save, Qua Sheet2"
    
    ActiveWorkbook.Save
    
    Sheets("sheet1").Activate
    MsgBox "Sau khi Save, Qua Sheet1"
    
    Application.EnableEvents = True
    Cancel = True
End Sub
Trong Sub nay minh Cancel = True, còn SaveAsUI mình không biết sử dụng biến này?. Ấn nút File/ SaveAs thi nó không hiện lên hộp thoại SaveAs mà lại có tác dung i chan Save??? Các bạn biết giúp với.
 
Lần chỉnh sửa cuối:
Upvote 0
Em hỏi ý này, nếu không đúng chủ đề mong mọi người bỏ qua. Em code VBA trên máy của em, rồi mang sang các máy khác dùng. Ở máy em Print/Print Preview thì không sao, nhưng trên máy khác (em đã test 3 máy) đều bị nhấp nháy liên tục các nút (tạo bằng Developer -> Insert -> Form Control -> Button). Cảm ơn mọi người nhiều.
 
Upvote 0
Sau khi Bác Print Preview xong vào bảng tính các nút có bị nhấp nháy không vậy ạ?
Hic, em cũng biết code hoa mắt, nhưng chưa biết cách làm cho gọn gàng.
 
Upvote 0
Web KT

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

Back
Top Bottom