Translate

Chủ Nhật, 3 tháng 2, 2013

Dùng MS Word và VBA (macro)


Kiến thức cần có khi soạn thảo văn bản.
Một văn bản 'chuẩn mực' như MS Word quy định mới có thể chạy các macro 'trơn tru' được.

1- Space: Trong toàn văn bản, không cho phép có 2 space liền nhau.
Macro xóa các khoảng trống thừa:

Private Sub XóaKhoangTrông()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "  " '(2 space) 
        .Replacement.Text = " " '(1 space) 
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Forward = True
        .Wrap = wdFindContinue
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Ghi chú: Sub XóaKhoangTrông sẽ được dùng chung cho các trường hợp tiếp sau đây. Mỗi trường hợp sau, ta chỉ thay thế  các đối số .Text và .Replacement.Text

2- Dấu phẩy: buộc dính sát với ký tự cuối đoạn văn (phrase), kế tiếp là một space. Ký tự tiếp theo là ký tự thường.


2a) Macro chỉnh sửa dấu phẩy dạng abc , def
Dùng code như Sub XóaKhoangTrông.
Thay thế các đối số .Text.Replacement.Text

Text = " ," '(space và phẩy) 
.Replacement.Text = "," '(phẩy)


2b) Macro chỉnh sửa dấu phẩy dạng abc,def
Thay thế các đối số:

.Text = "," '(phẩy) 
.Replacement.Text = ", " '(phẩy và space)



3- Dấu chấm: buộc dính sát với ký tự cuối câu (sentence, paragraph). Kết thúc câu (sentence) với 1 space, kết thúc đoạn văn (paragraph) là xuống dòng. Ký tự nối tiếp bao giờ cũng là ký tự HOA.
Macro chỉnh sửa dấu chấm không xuống dòng tương tự macro dấu phẩy, ta thay dấu phẩy thành dấu chấm.



4- Dấu ngoặc đơn: gồm đơn mở và đơn đóng.
- Đơn mở bao giờ cũng dính sát với ký tự đầu tiên.
- Đơn đóng bao giờ cũng dính sát với ký tự cuối cùng.
ví dụ: abc (def).

Các dấu đóng mở khác quy định tương tự dấu ngoặc đơn;
vd: abc "def";
abc [def];
abc 'def'
và abc {def}


4a) Macro sửa đơn mở: đơn giản.

.Text = "( "
.Replacement.Text = "("

4b) Đơn đóng: tương tự.

.Text = " )"
.Replacement.Text = ")"



5- Dấu hỏi: buộc dính sát với ký tự cuối câu. Dấu hỏi giá trị ngắt câu tương đương dấu chấm, vì thế sau dấu hỏi không thêm dấu chấm. 
vd: abc? Def
ví dụ trên, dấu hỏi dính liền ký tự c, và ký tự D buộc viết HOA vì xem đã ngắt câu. Không có dấu chấm kèm.

Macro sửa cũng tương tự:


.Text = " ?"
.Replacement.Text = "?"


*** Vì dấu hỏi ? là ký tự đặc biệt nên khi chạy macro, có thể một số trường hợp kết quả không như ý. Trường hợp nầy ta phải khai báo:

.Text = " \?"
.Replacement.Text = "\?"

        .MatchWildcards = True
.MatchWildcards = True nghĩa là có ký tự đặt biệt, .Text = " \?" nghĩa là trở về dấu ? bình thường


6- Dấu than: buộc dính sát với ký tự cuối câu. Dấu than giá trị ngắt câu tương đương dấu chấm, vì thế sau dấu than không thêm dấu chấm. 
vd: abc! Def
ví dụ trên, dấu than dính liền ký tự c, và ký tự D buộc viết HOA vì xem đã ngắt câu. Không có dấu chấm kèm.

Macro sửa cũng tương tự:


.Text = " !"
.Replacement.Text = "!"


*** Vì dấu hỏi ! là ký tự đặc biệt, có thể điều chỉnh code như dấu hỏi. 


7- Dấu hai chấm: buộc dính sát với ký tự cuối từ.
vd: abc: def
macro sửa cũng tương tự:


.Text = " :"
.Replacement.Text = ":"



8- Dấu ba chấm: buộc dính sát với ký tự cuối từ, không quy định số lượng dấu chấm, nhưng thường chỉ 3 chấm là đủ:
vd: abc... def

9- Xuống dòng: Không quy định số lượng xuống dòng.
* Ký tự đầu dòng buộc phải viết hoa, trừ trường hợp đặc biệt.
* Ký tự đầu dòng viết ở đầu dòng, hoặc thụt vào 1 space, hoặc thụt vào 1 tab theo trình bày của mỗi người.

Nếu xuống dòng không viết gì (dòng trống) mà có thụt vào (space hay tab) là không đúng quy định.



Xóa nhiều xuống dòng với bảng Find and Replace:
Find: ^p^p
Replace: ^p

Macro:

.Text = Chr(10)  & Chr(13) & Chr(10)  & Chr(13)
.Replacement.Text = Chr(10)  & Chr(13)


Xóa thụt vào 1 space: Đôi lúc xóa nhiều xuống dòng như trên thấy không thay đổi là do xuống dòng có thụt vào.

bảng Find and Replace:

Find: ^p 
Replace: ^p
(ở Find, sau ^p có một space)


Macro:

.Text = Chr(13) & " "
.Replacement.Text = Chr(13)


==========

bổ sung:






7 nhận xét:

  1. bạn ơi bạn giúp m 1 chút về macro trong VBA word dc ko có j bạn nt qua mail của m dnthang1993@gmail.com tks bạn nhiều

    Trả lờiXóa
    Trả lời
    1. Nếu bạn Thắng Đỗ Nam có vấn đề khác về VBA/Word, bạn có thể vào Box VBA của CLBVB; tôi cũng sinh hoạt ở đấy.
      http://caulacbovb.com/forum/viewtopic.php?f=15&p=144986#p144986

      Xóa
  2. Xin ad cho hỏi: muốn xóa thụt đầu dòng bằng phím space thì làm sao. Thành đã tìm trên CLBVB mà không thấy. rất mong được giúp đỡ. Chân thành cám ơn!

    Trả lờiXóa
  3. cháu chào bác, có có thể cho cháu hỏi làm thế nào để chạy được chương trình Sổ tay VBA Word - download được không ạ, cháu có tải về nhưng không làm sao chạy được ạ :((
    Cháu cảm ơn nhiều a

    Trả lờiXóa
  4. Thưa chú cháu có 1 file excel hỗ trợ copy bảng số liệu sang word nhưng đang gặp vấn đề là: Đối với số liệu dữ liệu number khi copy sang word sẽ hiện thêm các khoảng trắng, cháu muốn dùng VBA để xóa các đối tượng này, nhưng tham khảo 1 số nơi mà chưa tìm được, cháu mới nghiên cứu VBA nên không rành lắm, nhờ chú hỗ trợ code với
    https://drive.google.com/file/d/1zde2bV ... sp=sharing

    Trả lờiXóa
  5. https://drive.google.com/file/d/1zde2bVa4QoiOD7dhwmTu3qVKzbC_M8n8/view?usp=sharing

    Trả lờiXóa

Trực tuyến

Mục lục Toàn bộ (theo thứ tự thời gian)

Trực tuyến