Không cho thay đổi Header and Footer trong File Word. (1 người xem)

Liên hệ QC

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

chuot0106

Thành viên gắn bó
Tham gia
20/1/13
Bài viết
2,567
Được thích
1,670
Tôi có 1 File Word, ở File này tôi có chèn Haerder và Footer cùng 1 nội dung, ví dụ "Tôi muốn cố định nội dung này". Tôi muốn nhờ các thành viên trên GPE viết giúp đoạn code thực hiện công việc sau với ạ: Vẫn cho phép người khác thay đổi nội dung của Haerder và Footer nhưng sau khi thay đổi xong nếu thực hiện lệnh in các trang của File đó ra thì nó lại in ra nội dung của Haerder và Footer tôi đã chèn ban đầu. Mong các thầy, các anh chị và các bạn giúp đỡ ạ!
P/S: Ở trên File Excel thầy ndu... đã giúp tôi bằng sự kiệnWorkbook_BeforePrint nhưng trên Word thì tôi không biết. Mong nhận được sự giúp đỡ của các thầy, các anh chị và các bạn!
 

File đính kèm

P/S: Ở trên File Excel thầy ndu... đã giúp tôi bằng sự kiệnWorkbook_BeforePrint nhưng trên Word thì tôi không biết. Mong nhận được sự giúp đỡ của các thầy, các anh chị và các bạn!

Theo như tôi biết thì Word không có sự kiện BeforePrint. Tuy nhiên ta có thể tạo ra sự kiện bằng Class
Bạn tự nghiên cứu xem! (tôi biết làm được nhưng... lười quá)
 
Upvote 0
Theo như tôi biết thì Word không có sự kiện BeforePrint. Tuy nhiên ta có thể tạo ra sự kiện bằng Class
Bạn tự nghiên cứu xem! (tôi biết làm được nhưng... lười quá)
Kiến thức về class em chưa biết. Nếu khi nào thầy rảnh viết giúp em với vì em cần ngay. Vấn đề nghiên cứu em sẽ thực hiện sau ạ.
 
Upvote 0
Kiến thức về class em chưa biết. Nếu khi nào thầy rảnh viết giúp em với vì em cần ngay. Vấn đề nghiên cứu em sẽ thực hiện sau ạ.

Hướng dẫn sơ qua thôi nhé:
1> Insert 1 Class Module, đặt tên là clsEvents rồi chèn code này vào trong:
Mã:
Public WithEvents wdApp As Word.Application
Private Sub wdApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
  '[COLOR=#ff0000]Chỗ này là nơi bạn sẽ làm gì đó với Header, Footer giống như đã làm trên Excel[/COLOR]
End Sub
-------------------
2> Insert 1 Module với code:
Mã:
Public cEvent As clsEvents
Public Sub CreateEvents(App As Application)
  Set cEvent = New clsEvents
  Set cEvent.wdApp = App
End Sub
------------------
3> Code trong ThisDocument:
Mã:
Private Sub Document_Open()
  CreateEvents Application
End Sub
Đại khái thế
Chỗ màu đỏ bạn có thể nghiên cứu bằng cách Record macro xem Word viết code thay đổi Header, Footer như thế nào, từ đó mà áp dụng
 
Upvote 0
Hướng dẫn sơ qua thôi nhé:
1> Insert 1 Class Module, đặt tên là clsEvents rồi chèn code này vào trong:
Mã:
Public WithEvents wdApp As Word.Application
Private Sub wdApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
  '[COLOR=#ff0000]Chỗ này là nơi bạn sẽ làm gì đó với Header, Footer giống như đã làm trên Excel[/COLOR]
End Sub
-------------------
2> Insert 1 Module với code:
Mã:
Public cEvent As clsEvents
Public Sub CreateEvents(App As Application)
  Set cEvent = New clsEvents
  Set cEvent.wdApp = App
End Sub
------------------
3> Code trong ThisDocument:
Mã:
Private Sub Document_Open()
  CreateEvents Application
End Sub
Đại khái thế
Chỗ màu đỏ bạn có thể nghiên cứu bằng cách Record macro xem Word viết code thay đổi Header, Footer như thế nào, từ đó mà áp dụng
Thầy ơi em làm theo hướng dẫn của thầy kết quả đã đúng ý của em tuy nhiên vẫn còn 1 số vấn đề như sau:
+ Khi thay đổi nội dụng của Hearder and Footer thì sau khi thực hiện lệnh in nội dung của Hearder and Footer mới chèn không bị mất đi (Tức là cả nội dung của Hearder and Footer mới và cũ cùng hiển thị).
+ Vấn đề thứ 2 em muốn hỏi thầy là bên Word không biết nội dung của Hearder and Footer có canh lề trái, phải, giữa được không ạ!
Mong thầy và các anh chị giúp đỡ ạ!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mong các thầy và các anh chị giúp đỡ em ạ!

Mã:
Private Sub wdApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
    With ActiveDocument.Sections(1)
'        header text
        .Headers(wdHeaderFooterPrimary).Range.Text = "Toi muon co dinh noi dung nay"
'        center header
        .Headers(wdHeaderFooterPrimary).Range.Paragraphs.Alignment = wdAlignParagraphCenter
'        footer text
        .Footers(wdHeaderFooterPrimary).Range.Text = "Toi muon co dinh noi dung nay"
'        center footer
        .Footers(wdHeaderFooterPrimary).Range.Paragraphs.Alignment = wdAlignParagraphCenter
    End With
End Sub
 
Upvote 0
Mã:
Private Sub wdApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
    With ActiveDocument.Sections(1)
'        header text
        .Headers(wdHeaderFooterPrimary).Range.Text = "Toi muon co dinh noi dung nay"
'        center header
        .Headers(wdHeaderFooterPrimary).Range.Paragraphs.Alignment = wdAlignParagraphCenter
'        footer text
        .Footers(wdHeaderFooterPrimary).Range.Text = "Toi muon co dinh noi dung nay"
'        center footer
        .Footers(wdHeaderFooterPrimary).Range.Paragraphs.Alignment = wdAlignParagraphCenter
    End With
End Sub
Thầy có thể hướng dẫn cách sử dụng code giúp em không ạ! Quả thật với Excel thì em còn biết chút ít, với Word em thấy khó quá!
 
Upvote 0
Thầy có thể hướng dẫn cách sử dụng code giúp em không ạ! Quả thật với Excel thì em còn biết chút ít, với Word em thấy khó quá!

Tôi không hiểu ý bạn. Trong tập tin của bạn đã có Sub wdApp_DocumentBeforePrint, tôi chỉ sửa lại nội dung của Sub wdApp_DocumentBeforePrint

Bạn viết ra code như trong tập tập tin, code là của bạn thì chính ra tôi mới là người hỏi cách sử dụng code ấy mới phải.
 
Upvote 0
Code thì thầy ndu... và thầy siwtom đã viết sẵn rồi. Còn mỗi việc sử dụng thôi mà mình cũng không biết. Bạn nào rành về code bên word giúp mình với. Không biết đoạn code của thầy siwtom phải bỏ vào đâu? Tôi đã thử bỏ vào chỗ đỏ đỏ của thầy ndu nhưng vẫn không được. Code không thấy tác dụng gì.
Mã:
Public WithEvents wdApp As Word.Application
Private Sub wdApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
  '[COLOR=#ff0000]Chỗ này là nơi bạn sẽ làm gì đó với Header, Footer giống như đã làm trên Excel[/COLOR]
End Sub
Tôi cũng đã cho vào "This document" nhưng cũng thế và cả modul và classmodul cũng vậy luôn.
 
Upvote 0
Tôi không hiểu ý bạn. Trong tập tin của bạn đã có Sub wdApp_DocumentBeforePrint, tôi chỉ sửa lại nội dung của Sub wdApp_DocumentBeforePrint

Bạn viết ra code như trong tập tập tin, code là của bạn thì chính ra tôi mới là người hỏi cách sử dụng code ấy mới phải.
Em đã thử thay vào đoạn code thầy sửa vào sub wdApp_DocumentBeforePrint nhưng khi in thử thì không thấy code có tác dụng gì cả ạ! Thầy xem File ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi không hiểu ý bạn. Trong tập tin của bạn đã có Sub wdApp_DocumentBeforePrint, tôi chỉ sửa lại nội dung của Sub wdApp_DocumentBeforePrint

Bạn viết ra code như trong tập tập tin, code là của bạn thì chính ra tôi mới là người hỏi cách sử dụng code ấy mới phải.
Đúng là như "ma làm" thầy ạ! Lúc trước em thử đi thử lại không được. Vừa rồi em thử lại thì ngon lành rồi! Em cảm ơn thầy rất rất nhiều ạ!
Em đã học thêm được cách căn lề cho Header and Footer từ thầy nữa!
Một lần nữa em cảm ơn thầy siwtom và thầy ndu ạ!
 
Upvote 0
Bạn đính kèm tập tin làm gì khi mà nó mật khẩu?
Xin lỗi thầy em đính kèm nhầm ạ! Nhưng mà em đã làm được rồi! Quả thật không hiểu nổi là tại máy hay tại người nữa! Lúc đầu em làm như vậy chạy thử mấy lần không được! Vừa lên diễn đàn hỏi thầy xong chạy thử lại thấy OK.
 

File đính kèm

Upvote 0
Thầy ơi, em nhờ thầy chút nữa ạ, giả sử trong Header có 3 nội dung chẳng hạn. Ví dụ:
Tôi muốn cố định nội dung1......Tôi muốn cố định nội dung2...Tôi muốn cố định nội dung 3.
và Footer cũng gồm 3 nội dung kiểu như vậy. Cả 3 nội dung này lần lượt được canh lề trái, giữa và phải. Em vẫn muốn yêu câu như ở bài đầu(Không cho thay đổi nội dung) liệu có được không vậy thầy. Nếu được Code sẽ sửa ra sao ạ?
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thầy ơi, em nhờ thầy chút nữa ạ, giả sử trong Header có 3 nội dung chẳng hạn. Ví dụ:
Tôi muốn cố định nội dung1......Tôi muốn cố định nội dung2...Tôi muốn cố định nội dung 3.
và Footer cũng gồm 3 nội dung kiểu như vậy. Cả 3 nội dung này lần lượt được canh lề trái, giữa và phải. Em vẫn muốn yêu câu như ở bài đầu(Không cho thay đổi nội dung) liệu có được không vậy thầy. Nếu được Code sẽ sửa ra sao ạ?

3 nội dung này ở những đâu?
 
Upvote 0
Nếu trang đầu có 1 header riêng, các trang chẵn có header riêng và các trang lẻ cũng thế thì ...

Trên cơ sở code cũ tôi đoán mò
Mã:
Private Sub wdApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
    With ActiveDocument.Sections(1)
        .Headers(wdHeaderFooterFirstPage).Range.Text = "Toi muon co dinh header1"
        .Headers(wdHeaderFooterPrimary).Range.Text = "Toi muon co dinh header2"
        .Headers(wdHeaderFooterEvenPages).Range.Text = "Toi muon co dinh header3"
        .Footers(wdHeaderFooterFirstPage).Range.Text = "Toi muon co dinh footer1"
        .Footers(wdHeaderFooterPrimary).Range.Text = "Toi muon co dinh footer2"
        .Footers(wdHeaderFooterEvenPages).Range.Text = "Toi muon co dinh footer3"
    End With
End Sub

Còn về căn lề thì trên cơ sở code cũ (wdAlignParagraphCenter) bạn tự "vọc" nhé. Thay Center bằng Left, Right
 
Upvote 0
Xin lỗi thầy em đính kèm nhầm ạ! Nhưng mà em đã làm được rồi! Quả thật không hiểu nổi là tại máy hay tại người nữa! Lúc đầu em làm như vậy chạy thử mấy lần không được! Vừa lên diễn đàn hỏi thầy xong chạy thử lại thấy OK.

Nhiều khi không hiểu tại sao mà sub wdApp_DocumentBeforePrint không được thực hiện.
Sẩy ra sự kiện hay không thì chả ai biết nhưng nếu SUB không được thực hiện thì dĩ nhiên header vẫn là cũ.
 
Upvote 0
Nếu trang đầu có 1 header riêng, các trang chẵn có header riêng và các trang lẻ cũng thế thì ...

Trên cơ sở code cũ tôi đoán mò
Mã:
Private Sub wdApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
    With ActiveDocument.Sections(1)
        .Headers(wdHeaderFooterFirstPage).Range.Text = "Toi muon co dinh header1"
        .Headers(wdHeaderFooterPrimary).Range.Text = "Toi muon co dinh header2"
        .Headers(wdHeaderFooterEvenPages).Range.Text = "Toi muon co dinh header3"
        .Footers(wdHeaderFooterFirstPage).Range.Text = "Toi muon co dinh footer1"
        .Footers(wdHeaderFooterPrimary).Range.Text = "Toi muon co dinh footer2"
        .Footers(wdHeaderFooterEvenPages).Range.Text = "Toi muon co dinh footer3"
    End With
End Sub

Còn về căn lề thì trên cơ sở code cũ (wdAlignParagraphCenter) bạn tự "vọc" nhé. Thay Center bằng Left, Right
Ý của em với Header có 3 nội dung cùng hiển thị ạ, 3 nội dung này lần lượt được canh lề trái, giữa, phải ạ. Thầy xem File đính kèm ở #16 ạ!
P/S: Tất cả các trang của em có nội dung Header and Footer giống nhau luôn ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
Nhiều khi không hiểu tại sao mà sub wdApp_DocumentBeforePrint không được thực hiện.
Sẩy ra sự kiện hay không thì chả ai biết nhưng nếu SUB không được thực hiện thì dĩ nhiên header vẫn là cũ.
Chính xác là vậy thầy ạ! Lúc sau em có chỉnh sửa lại nội dung H and F thì code mới chạy ạ!
 
Upvote 0
Ý của em với Header có 3 nội dung cùng hiển thị ạ, 3 nội dung này lần lượt được canh lề trái, giữa, phải ạ. Thầy xem File đính kèm ở #16 ạ!
P/S: Tất cả các trang của em có nội dung Header and Footer giống nhau luôn ạ!

Thử thế này xem

Mã:
Private Sub wdApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
    With ActiveDocument.Sections(1)
        .Headers(wdHeaderFooterPrimary).Range.Text = "noi dung1" & vbTab & "noi dung2" & vbTab & "noi dung3"
        .Headers(wdHeaderFooterPrimary).Range.Paragraphs.Alignment = wdAlignParagraphCenter
        
        .Footers(wdHeaderFooterPrimary).Range.Text = "noi dung1" & vbTab & "noi dung2" & vbTab & "noi dung3"
        .Footers(wdHeaderFooterPrimary).Range.Paragraphs.Alignment = wdAlignParagraphCenter
    End With
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom