• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Trao đổi về Word VBA Mời vào đây!

Nơi trao đổi về VBA (Visual Basic for Application), lập trình cho ứng dụng Microsoft Office, AutoCAD...

Điều hành viên: tungblt

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Trao đổi về Word VBA Mời vào đây!

Gửi bàigửi bởi truongphu » T.Bảy 11/02/2012 3:44 pm

Lời nói đầu: VB6 là một ngôn ngữ dễ hiểu, dễ ứng dụng (trên Windows XP); tuy nhiên ứng dụng nhiều nhất của VB6 chính là một nhánh của nó: VBA cho bộ MS Office (kể cả phần mềm khác như AutoCad...).

Học cơ bản (VB6) nhuần nhuyễn là tốt, nhưng nếu có thêm ứng dụng trong cuộc sống (VBA) thì tuyệt vời hơn. Đây là điều thời gian gần đây tôi mới "ngộ" ra! _ vì trước đây cứ xem thường nó: ai lại học VBA cơ chứ?, cứ nhờ Office tự động ghi lại Macro là xong! Chả có gì gọi là "sản phẩm độc lập" cho riêng mình!

Ấy thế nhưng khi phải biên tập một file word chẳng hạn, bạn sẽ thấy VBA cần thiết đến độ nào. Tôi đang đọc truyện kiếm hiệp chuyển ngữ, (dân chuyên ngành gọi là vietphrase), đa số dịch từ truyện tàu, cú pháp đảo lộn khiến câu văn trúc trắc, khó hiểu. Mặc dù có các Tools của Word hổ trợ kèm tạo macro nhưng vẫn không đủ đáp ứng nhu cầu biên tập, thế nên dùng kiến thức VB6 để viết trực tiếp các macro hoạt động theo ý mình, thu lại kết quả thật đáng công lao!

Tại Việt Nam, VBA với Excel đã có GPE (Giải Pháp Excel) = Forum chuyên ngành về Excel (và VBA Excel), là một forum lớn và có uy tín (tôi cũng hay tham khảo tài liệu ở đấy); Còn VBA các mảng khác lại chưa có forum độc lập như Word, Access, AutoCad, OutLook... Nhiều thắc mắc về các mảng nầy "đành nhờ" CLBVB giải quyết trong Box VBA nầy.

Để thuận tiện cho các bạn đang có nhu cầu về VBA/Word, tôi mở chuyên đề nầy và chúng ta cùng thảo luận. Rất hoan nghênh các bạn (gái) đang hành xử tài liệu trên word (doc), text (txt) tham gia thảo luận.

---
(*) Word 2003 là vì tôi đang dùng với định dạng doc, nghe nói 2007 là docx... tuy nhiên mong VBA có thể giống nhau!
Sửa lần cuối bởi truongphu vào ngày CN 29/07/2012 1:06 pm với 1 lần sửa.


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Macro Định dạng nghiêng (Italic) các từ tương tự trong file

Gửi bàigửi bởi truongphu » T.Bảy 11/02/2012 6:05 pm

Mở hàng cho topic: Macro Định dạng nghiêng (Italic) các từ tương tự trong file


Ví dụ đoạn văn sau:
(TNO) Với phong cách thi đấu hoa mỹ và tinh tế, tiền vệ thiên tài người Brazil Socrates nghiễm nhiên là một trong những danh thủ xuất sắc nhất mọi thời đại, song người ta không thể chỉ nói về Socrates trên sân bóng. Ông đơn giản là hơn cả một cầu thủ.


Chúng ta muốn nhấn mạnh từ Socrates bằng cách in nghiêng trong toàn bài văn.
cách làm: Ta bôi đen (chọn) từ Socrates bất kỳ trong bài và chạy macro sau:

  1. Sub AllItalic()
  2.     With Selection.Find
  3.         .Text = Selection.Text
  4.         .Replacement.Text = Selection.Text
  5.         .Replacement.Font.Italic = True
  6.         .Wrap = wdFindContinue
  7.     End With
  8.     Selection.Find.Execute Replace:=wdReplaceAll
  9. End Sub


Để thuận tiện, ta đưa shortcut của macro trên lên menu. Tham khảo:
Tùy biến Menu Word và sử dụng macro
viewtopic.php?f=22&t=21526

các bạn có thể đọc thêm các bài viết về VBA/Word: vd
Các bài viết VB ứng dụng MS Word
viewtopic.php?f=30&t=4984
VBA MS Word
viewtopic.php?f=41&t=20042
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Viết hoa đầu dòng

Gửi bàigửi bởi truongphu » T.Bảy 11/02/2012 8:53 pm

Trước đây tôi có viết bài Viết hoa đầu dòng giữ nguyên màu, đấy là bài khó; hơn nữa khi chạy khá chậm vì Selection phải làm việc từng ký tự thay đổi dựa trên từng câu.

Xem: Cuộc thi: VBA/Word Đề tài: Tìm và thay thế.
viewtopic.php?f=15&t=19972#p112186

-----
Nếu yêu cầu không cao, ta có thể dùng code gọn hơn và quan trọng là máy chạy nhanh hơn nhờ Selection ít thay đổi.
Code như sau:
  1. Sub HoaDauCau()
  2. Dim i&
  3. For i = 97 To 121
  4.     If (i = 102) Or (i = 106) Or (i = 119) Then GoTo BoQua ' f, j, w
  5.    With Selection.Find
  6.         .Text = Chr(13) & Chr(i)
  7.         .Replacement.Text = Chr(13) & Chr(i - 32)
  8.         .Wrap = wdFindContinue
  9.     End With
  10.     Selection.Find.Execute Replace:=wdReplaceAll
  11. BoQua:
  12. Next
  13. End Sub


Với code trên, bạn nhận ra ngay là viết hoa ký tự ascii không phải unicode.
Nếu có space trước ký tự đầu dòng, bạn phải đều chỉnh code trên với:

Mã: Chọn hết

        .Text = Chr(13) & " " & Chr(i)
        .Replacement.Text = Chr(13) & " " & Chr(i - 32)


Cho dù phải dùng vòng lặp, bảo đảm code trên vẫn thực hiện công việc trong vòng vài phút (file doc 25 MB)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Chuyển nhanh đến Bookmark

Gửi bàigửi bởi truongphu » CN 12/02/2012 10:30 am

Chúc mừng sinh nhật Câu Lạc Bộ Visual Basic!

======

Có bạn nêu: Trong VBA MS Word 2003
http://caulacbovb.com/forum/viewtopic.php?f=41&t=20042
phần BooKMark có hàm Chuyển nhanh đến Bookmark
hỏi: ý nghĩa nó thế nào và cách dùng.

BookMark là đánh dấu đoạn văn nào đó, thông thường phục vụ cho việc làm mục lục (hay trích dẫn). Để làm việc nầy ta phải tạo HyperLink đến BookMark vừa tạo.
(Xem bài: Làm Mục lục trong MS Word (Version 2003)
http://caulacbovb.com/forum/viewtopic.php?f=30&t=4984&p=117953#p117953 )

Khi bạn đã có HyperLink/BookMark, thao tác dùng Hyperlink trên Word là Ctrl + Click = đòi hỏi phải dùng 2 tay: trái nhấn phím và phải click chuột, khá phiền toái.

Bạn chỉ cần dùng 1 tay click chuột: nhấn vào Hyperlink, xong nhấn vào nút có chứa macro trên, đấy là ý nghĩa của hàm.

Cách dùng Macro như sau:
  1. Sub ChuyenDenBookmark()
  2.  Selection.GoTo What:=wdGoToBookmark, Name:="Name"
  3. End Sub


Trong Sub trên, "Name" là tên của Bookmark mà bạn đã biết, vd:
Selection.GoTo What:=wdGoToBookmark, Name:="Chuong12"
với code nầy, dù dấu nháy con trỏ đặt ở đâu, khi chạy macro trên vẫn đưa tới đúng trang có bookmark, vì Name cố định đã khai báo.

Giả sử chúng ta lại không biết tên cụ thể của Bookmark mà Hyperlink hướng đến, bạn viết như sau:
Selection.GoTo What:=wdGoToBookmark, Name:=Selection.Hyperlinks.Item(1).Name
bạn chú ý code trên: Selection.Hyperlinks.Item(1).Name
nghĩa là Selection có hyperlink với tên là...
do đó khi sử dụng, buộc đầu tiên phải đưa con trỏ nhấn vào hyperlink để xác nhận Selection, sau đó mới chạy macro thì kết quả sẽ dẫn đến đúng trang.
Nếu dấu nháy con trỏ không đúng: kết quả chạy sai (=dấu nháy nằm ở hyperlink khác) hay báo lỗi! (=dấu nháy nằm ở vị trí không có hyperlink)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Document được active cả khi UserForm Show

Gửi bàigửi bởi truongphu » T.Hai 13/02/2012 3:27 pm

Khi bạn chạy UserForm, chúng hiện ra và luôn luôn active trên nền Document. Nếu ta muốn edit trực tiếp trên Document, chỉ có cách đóng UseForm lại.
Nếu được chuyển Focus qua lại giữa Document và UserForm thì thuận tiện biết bao. Sau đây là cách thiết kế để đạt yêu cầu trên:

Cửa sổ UserForm Properties, kéo trượt xuống chọn ShowModal đổi thành False.
= là xong!

---------
UserForm Show ngay khi vừa mở Document:

Bạn đưa code sau vào ThisDocument của Project, (không phải của Normal)

Mã: Chọn hết

Private Sub Document_Open()
    UserForm1.Show
End Sub


File Doc nén đính kèm có UserForm hiện ngay khi mở Document, và cho phép chuyển đổi Focus qua lại giữa Document và UserForm. Bạn có thể tham khảo chúng (Gọi VBE: Alt + F11)
Tập tin đính kèm
Document Active when UserForm Show.rar
(6.78 KiB) Đã tải 503 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Word: Bỏ chức năng Spelling & Grammar

Gửi bàigửi bởi truongphu » T.Tư 15/02/2012 7:59 am

Chức năng Spelling & Grammar là một công cụ tốt cho những người chuyên làm việc với Word; nhưng đối với người ít dùng Word thì lại khá khó chịu với nó. Việc tắt đi Word/Spelling & Grammar còn giảm bớt chức năng chạy ngầm (background) vốn hao tốn tài nguyên (RAM).
Thông thường người ta hay vào bảng Options, chọn thẻ Spelling & Grammar và bỏ kiểm các mục; việc nầy sẽ thấy ngay tác dụng là Spelling & Grammar hình như không biểu hiện nữa. Tuy thế, Spelling & Grammar vẫn chạy ngầm khi Word hoạt động!

Để tắt hẵn chương trình Spelling & Grammar mà theo ý riêng là không cần thiết, chúng ta phải vào Add or Remove Programs (Windows\Control Panel), vào mục cài đặt Microsoft office nhấn Change, bảng Setup hiện ra, kiểm mục Add or Remove Features và Next, bảng tiếp kiểm vào Choose advanced customization of appications, Next. Hãy bỏ mục Office Tools, và vào Office Shared Features bỏ Proofinf Tools, xong nhấn Update.

Word: Không hiện ra bảng Paste Option khi dán trong Documents.

Mặc định khi dán vào documents, Word sẽ hiện ra bảng Paste Option giúp chúng ta chọn lựa các kiểu định dạng đoạn văn vừa dán. Trong đa số trường hợp, điều nầy là không cần thiết và làm rườm rà, chướng mắt!.
Để tắt chức năng nầy, bạn vào Option, thẻ Edit, gần dưới có mục Cut and paste options, hãy bỏ kiểm ô Show Paste Option buttons
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Công cụ đảo ngược đoạn văn trong word

Gửi bàigửi bởi truongphu » T.Sáu 17/02/2012 8:22 am

Tôi có viết một bài về vấn đề nầy:
viewtopic.php?f=30&t=4984#p111142

Để thuận tiện, ta có thể làm shortcut đến các macro trên, đưa lên menu
(Tùy biến Menu Word và sử dụng macro)
viewtopic.php?f=22&t=21526

Hoặc ta làm một userForm luôn luôn hiện ra bên cạnh
(Document được active cả khi UserForm Show)
posting.php?mode=reply&f=15&t=21600&sid=ad7fb48a0522430dcb66afaa549b7e8a#pr118853

Các hình minh họa sau, chọn userform:
1.JPG


Trong hình được khoanh tròn là đoạn văn "ma pháp phương diện thiên phú". Để đảo thành "thiên phú phương diện ma pháp", tôi đặt con trỏ giữa từ "ma" như trên hình rồi nhấn nút '4-2'
(Cũng có thể bôi đen 6 từ trên rồi nhấn 4-2. 4-2 có nghĩa là tách 2 nhóm 4 từ đầu và 2 từ sau, lệnh chúng hoán vị)
kết quả sẽ là "thiên phú ma pháp phương diện" như hình sau:
2.JPG

Giờ cũng như đã làm trên, tiếp tục đảo 4 từ sau với nút nhấn 2-2
3.JPG


Đấy là công dụng của VBA: thao tác công việc trở nên đơn giản và nhanh chóng vô cùng!
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Macro Xóa nội dung cần tìm.

Gửi bàigửi bởi truongphu » T.Bảy 18/02/2012 1:48 pm

Xem câu hỏi: viewtopic.php?f=15&p=119046#p119046

Nhóm biên tập : aaaaa
Nguồn : cccccc
nội dung word

Nhóm biên tập : bbbbbb
Nguồn : cccccc
nội dung word

vậy có cách nào xóa phần nhóm biên tập và nguồn đi được không. (chú ý: aaaaaa, bbbbbb, cccccc là nội dung thay đổi nhưng mình cũng muốn xóa luôn)


Các từ tìm kiếm là "Nhóm biên tập", "Nguồn :"; tuy nhiên nội dung kèm các từ đó lại thay đổi và cần xóa!
Như vậy ta không thể dùng Selection.Find.Text cùng Selection.Find.Replacement.Text được.
Ta chỉ có thể đưa dấu nháy chạy từng câu, chọn câu đó xem trong đó có nội dung tìm không, nếu có thì xóa cả câu.

* Giả sử đoạn văn sau "Nhóm biên tập" là trên cùng một câu, cũng như thế với "Nguồn :"
Ta chạy macro như sau:

  1. Sub XoaDoanVanTim(NoiDungTim1 As String, Optional ByVal NoiDungTim2 As String = "")
  2.     'Ðua dâu nháy vê Ðâu document
  3.    Selection.HomeKey unit:=wdStory
  4. Do Until Selection.Range.Bookmarks.Exists("\EndOfDoc") = True ' cho Ðê'n cuô'i document
  5.   Selection.Move wdSentence, 1 ' move tu'`ng câu
  6.   Selection.MoveRight wdSentence, 1, wdExtend ' chon ca câu bôi Ðen
  7.  
  8.    If InStr(Selection.Text, NoiDungTim1) Then Selection.Delete
  9.    If Len(NoiDungTim2) Then
  10.     If InStr(Selection.Text, NoiDungTim2) Then Selection.Delete
  11.    End If
  12. Loop ' Vòng lap
  13. End Sub
  14.  
  15. Sub ChayMacroXóa()
  16.     XoaDoanVanTim "Nhóm biên", "Ngu" & ChrW(&H1ED3) & "n"
  17. End Sub


=> Sub XoaDoanVanTim là macro chính, Sub ChayMacroXóa là macro gọi Sub XoaDoanVanTim ra chạy.
=> Sở dĩ tôi viết đến 2 macro vì để các bạn khác cần dùng, chỉ cần thay các đối số thích hợp ở Sub ChayMacroXóa là xong.
* đối số 1 tôi bỏ chữ "tập" vì dính unicode, đối số 2 đành phải kèm ký tự unicode
=> XoaDoanVanTim là macro chính có 2 đối số: NoiDungTim1 là bắt buộc phải có, NoiDungTim2 không có cũng được

Mã: Chọn hết

   If Len(NoiDungTim2) Then
    If InStr(Selection.Text, NoiDungTim2) Then Selection.Delete
   End If

nghĩa là nếu có NoiDungTim2 thì xóa, không có thì bỏ qua
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Delete nhiều trang

Gửi bàigửi bởi truongphu » T.Hai 27/02/2012 10:16 am

Bạn muốn xóa rất nhiều trang trong document, ví dụ xóa 300 trang đầu tiên.

Thông thường ta làm bằng tay: Nhấn chuột trái từ đầu file và kéo rê xuống, đến vị trí cuối trang 300 thì thả chuột = bôi đen chọn 300 trang đầu.
Việc kéo rê vài trang thì chòn được, nhưng kéo rê vài trăm trang thì có chút nhọc sức! Hãy dùng code sau:

  1. Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="301"
  2. Selection.HomeKey Unit:=wdStory, Extend:=wdExtend
  3. Selection.Delete


Dòng 1: con trỏ di chuyển đầu trang 300 + 1
Dòng 2: Bôi đen từ đầu đến cuối trang 300
Dòng 3: Xóa

Đơn giản chứ nhỉ? :-j
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Xóa trang đang đọc

Gửi bàigửi bởi truongphu » T.Hai 27/02/2012 1:52 pm

current page là trang mà selection (dấu nháy con trỏ) đang hiện diện

Mã: Chọn hết

    Selection.GoTo What:=wdGoToBookmark, Name:="\page"
    Selection.Delete
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Cắt nửa file doc khi file có dung lượng rất lớn

Gửi bàigửi bởi truongphu » T.Sáu 09/03/2012 8:40 am

Thông thường để Cut hay Copy một đoạn văn, ta phải bôi đen đoạn văn ấy. Với file nhỏ vài trăm ký thì không yêu cầu gì: ta cứ việc nhấn nút trái chuột và kéo rê cho đến khi đạt yêu cầu. Tuy nhiên khi file dung lượng rất lớn từ chục MB trở lên thì việc chọn bôi đen như thế rõ ràng là không khả thi!
Thế nhưng bạn có thấy, dù file lớn đến đâu, nếu ta nhấn nút Select All (Ctrl A) thì toàn bộ file đều được chọn ngay tức khắc! Điều nầy có nghĩa là có cách chọn nhanh.

1- Xác định file word (doc) có bao nhiêu trang?
-> Công tác nầy dễ, không cần code. Bạn chỉ việc mở file và ngồi đợi (không thao tác trên file đang mở). Sở dĩ ngồi đợi vì công tác đọc file (Repaginate) dung lượng lớn khá chậm, chúng hoạt động nền (background) nên ta không làm việc gì để nhường cho chúng. (file nhỏ thì tức thời, file 20 MB chừng nửa phút).
Trên thanh Status (dưới cùng), bạn sẽ thấy: Page xxx là trang hiện tại (current), cách đó là tỉ trang hiện tại/Tổng số trang xxx/yyy. yyy là tổng số trang của file.

-> Nhanh hơn, ngay khi bạn mở file doc, vào menu File, xuống Properties, chọn bảng Statistics, đương nhiên cũng ngồi đợi một lát, sẽ hiện lên các thông số của file.

-> Với VBA, bạn có thể chạy1 trong 2 cách sau:

Mã: Chọn hết

Sub TongSoTrang1()
ActiveDocument.Repaginate
MsgBox ActiveDocument.BuiltInDocumentProperties(wdPropertyPages)
End Sub


Mã: Chọn hết

Sub TongSoTrang2()
ActiveDocument.Repaginate
MsgBox ActiveDocument.BuiltInDocumentProperties("Number of Pages")
End Sub


Hai cách trên đề giống nhau: yêu cầu word đọc file sau đó thông báo. Chúng chỉ khác nhau hằng số sử dụng.

2- Chọn điểm giữa file
Ta biết số yyy là tổng số trang, nửa file sẽ là yyy/2
vd yyy = 6000, nửa file là 3000
Bạn chạy code sau:

Mã: Chọn hết

Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=3000


đương nhiên ta không nên cắt file "máy móc" như thế mà nên chọn đến chổ nào vừa hết chương, có nhiều khoảng trống xuống hàng.
Nghĩa là câu code trên có thể sửa lại số trang ở sau: tới thêm vài trang hay lùi lại vài trang, aaa = (yyy/2) +- bbb

Mã: Chọn hết

Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=2978


Xem dấu nháy con trỏ: cũng chưa đến vị trí yêu cầu! vẫn còn cách một số dòng...
ta cho dấu nháy chạy tới tiếp vài dòng:

Mã: Chọn hết

Selection.GoTo What:=wdGoToLine, Which:=wdGoToRelative, Count:=10


nếu lùi lại thì:

Mã: Chọn hết

Selection.GoTo What:=wdGoToLine, Which:=wdGoToPrevious, Count:=8


3- Chọn nửa file:
- Chọn nửa file đầu:

Mã: Chọn hết

Selection.HomeKey Unit:=wdStory, Extend:=wdExtend


- Chọn nửa file sau:

Mã: Chọn hết

Selection.EndKey Unit:=wdStory, Extend:=wdExtend


bài viết khá dài, thực ra ta chỉ có vài dòng code (chọn nửa sau):

  1. Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=1694
  2. Selection.GoTo What:=wdGoToLine, Which:=wdGoToRelative, Count:=10
  3. Selection.EndKey Unit:=wdStory, Extend:=wdExtend


Trên cơ sở code nầy, bạn có thể cắt đoạn bất kỳ ở hai đầu khá nhanh; nếu cắt đoạn giữa hơi mất công một tí nhưng cũng nhanh.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

cách lọc chữ trong word

Gửi bàigửi bởi truongphu » T.Sáu 16/03/2012 11:48 am

Trích: Cho mình hỏi cách lọc chữ trong word bằng VB !!!
viewtopic.php?f=7&p=120480#p120474

noname_nonme đã viết:nhưng mà làm sao để bắt được chữ ở trên vậy bạn vd đoạn code trên consider ,
nếu đoạn khác là của chữ fly , negotiate ,... . có độ dài chữ khác nhau


Toàn bộ thao tác dùng đối tượng Selection
  1. Sub FindCopyFindPaste()
  2.  
  3. ' Ðua vê Ðâu trang
  4.    Selection.HomeKey unit:=wdStory, Extend:=wdMove
  5. ' Tìm chuôi <front>
  6.    Selection.Find.Text = "<front>"
  7.     Selection.Find.Execute
  8. ' Tìm ra thì Ðua dâ'u nháy vê cuôi    
  9.    Selection.Collapse Direction:=wdCollapseEnd
  10. '  Di chuyên qua phai 1 chu và bôi Ðen = chon
  11.    Selection.MoveRight unit:=wdWord, Count:=1, Extend:=wdExtend
  12.    
  13. ' khai báo 1 biên String Ðê làm tên file audio    
  14.    Dim MM$: MM = Trim(Selection.Text) & ".MP3"
  15. 'Ðua dâ'u nháy vê cuôi
  16.    Selection.Collapse Direction:=wdCollapseEnd
  17.  
  18. ' tìm  <front_audio_filename>
  19.    Selection.Find.Text = "<front_audio_filename>"
  20.     Selection.Find.Execute
  21.  
  22. ' Ðua dâ'u nháy vê cuôi
  23.    Selection.Collapse Direction:=wdCollapseEnd
  24. ' chon bên phai 8 ký tu
  25.    Selection.MoveRight unit:=wdCharacter, Count:=8, Extend:=wdExtend
  26. ' Dán tên file audio vào Ðó
  27.    Selection.Text = MM
  28. End Sub
Tập tin đính kèm
Doc1.rar
(6.88 KiB) Đã tải 397 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Xóa Hyperlink, Bookmark và tag

Gửi bàigửi bởi truongphu » T.Bảy 21/04/2012 11:23 am

nhochoclaptrinh đã viết:Trong MS Word mình có copy một bài viết từ Wikipedia, mọi người giúp mình cách viết code VB6 để xóa tính chất Hiperlink và xóa luôn các con số có dạng [1], [2], ....
Thanks

viewtopic.php?f=15&t=22537

Uzumaki Naruto đã hướng dẫn về xóa Hyperlink:
[vb] Dim oField As Field
For Each oField In ActiveDocument.Fields
If oField.Type = wdFieldHyperlink Then oField.Unlink
Next
Set oField = Nothing[/vb]

Tương tự ta xóa Bookmark:
[vb] Dim sBmark As Bookmark
For Each sBmark In ActiveDocument.Bookmarks
sBmark.Delete
Next
Set sBmark = Nothing[/vb]

các con số có dạng [1], [2], .. hay cả [n], [abc] ta có code xóa sau:
[vb] Selection.Find.ClearFormatting
With Selection.Find
.MatchWildcards = True
.Text = "\[*\]"
.Replacement.Text = ""
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll[/vb]
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Xóa các tag của source trang web

Gửi bàigửi bởi truongphu » T.Hai 23/04/2012 7:10 am

  1. Sub Delhtmltags()
  2.     Selection.Find.ClearFormatting
  3.     With Selection.Find
  4.         .MatchWildcards = True
  5.         .Text = "\<*\>"
  6.         .Replacement.Text = ""
  7.         .Wrap = wdFindContinue
  8.     End With
  9.     Selection.Find.Execute Replace:=wdReplaceAll
  10. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

doantrinh86
Bài viết: 1
Ngày tham gia: CN 22/04/2012 3:14 pm

Re: Trao đổi về VBA/MS Word (2003) (*)

Gửi bàigửi bởi doantrinh86 » T.Ba 24/04/2012 8:49 am

Mình có thắc mắc xin hỏi các bạn về hàm trong Excel.
Mình cần làm việc trong Excel với công thức chung như sau:
Mình có trước các hàng A1, A3, A4,A6,A7, A9,A10....
Mình cần thực hiện phép tính như sau:
A2=A1-A3
A5=A4 - A6
A8=A7-A9
.....
Tiếp theo các tổ hợp hàng khác đều như vậy.
Xin hỏi mọi người có ai có cách tự động hóa trong Excel giúp mình để đỡ mất thời gian hơn!
Cảm ơn các bạn!

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Trao đổi về VBA/MS Word (2003) (*)

Gửi bàigửi bởi truongphu » T.Ba 24/04/2012 9:03 am

@doantrinh86:
Nếu bạn doantrinh86 gởi bài về VBA/Word thì ở đây
còn Excel, mong bạn gới bài riêng (nhấn nút chủ đề mới)

mục đích để Chủ đề nầy thuần về Word/VBA
OK? :)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

thanhphongialy
Thành viên chính thức
Thành viên chính thức
Bài viết: 12
Ngày tham gia: CN 29/04/2012 9:03 am
Been thanked: 3 time

Re: Trao đổi về VBA/MS Word (2003) (*)

Gửi bàigửi bởi thanhphongialy » T.Năm 03/05/2012 8:08 pm

Cảm ơn anh TruongPhu đã hướng dẫn! Xin giúp đỡ!
E đã tạo 1 form, tìm và thay thế các bookmark bằng các textbox. E muốn lưu file doc này với 1 tên được lấy từ 1 textbox (txtTen) trong form, code thế nào, xin chỉ giúp!
Trong access code chạy được, chuyển qua VB phải thế nào?

Mã: Chọn hết

oApp.ActiveDocument.SaveAs Filename:=CurrentProject.Path & "\" & txtTen & ".doc"

Mã: Chọn hết

oApp.ActiveDocument.SaveAs Filename:="C:\ & txtTen & .doc"

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Trao đổi về VBA/MS Word (2003) (*)

Gửi bàigửi bởi truongphu » T.Sáu 04/05/2012 8:21 am

Mã: Chọn hết

oApp.ActiveDocument.SaveAs App.Path & "\" & txtTen & ".doc"


Mã: Chọn hết

oApp.ActiveDocument.SaveAs "C:\" & txtTen & ".doc"
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

thanhphongialy
Thành viên chính thức
Thành viên chính thức
Bài viết: 12
Ngày tham gia: CN 29/04/2012 9:03 am
Been thanked: 3 time

Re: Trao đổi về VBA/MS Word (2003) (*)

Gửi bàigửi bởi thanhphongialy » T.Ba 08/05/2012 11:02 am

đã làm được, đúng là 'không thầy-bó tay"
chân thành cảm ơn bác truongphu, nếu có thể, cho tôi địa chỉ, tôi gởi biếu bác ít cafe, hậu tạ! (để có gì hỏi nửa đỡ ngại, hì)

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Trao đổi về VBA/MS Word (2003) (*)

Gửi bàigửi bởi truongphu » T.Ba 08/05/2012 12:20 pm

thanhphongialy đã viết:nếu có thể, cho tôi địa chỉ, tôi gởi biếu bác ít cafe, hậu tạ!


có lý!
uống cà phê đọc code mắt sẽ sáng hơn =D>
5 Hồ Xuân Hương, Cam Đức, Cam Lâm, Khánh hòa
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh


Quay về “Visual Basic for Application (VBA)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.3 khách