• 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

anhcau
Bài viết: 8
Ngày tham gia: T.Bảy 06/07/2013 1:18 pm

Ứng dụng dịch Tiếng Anh và một số ngoại ngữ trong MS Word

Gửi bàigửi bởi anhcau » T.Tư 21/01/2015 3:11 pm

Chào các bạn và các anh chị em trong Câu lạc bộ Visual Basic (gọi chung là các bạn cho tiện ạ)
Chúc một năm mới an khang - mạnh khỏe


Như các bạn biết là khi dịch tài liệu Tiếng Anh hay tiếng Pháp sang tiếng Việt cái khó là ráp thành câu cho đúng ngữ pháp Việt. Hiện có ứng dụng Google dịch nhưng khó sử dụng được tốt.
Trong quá trình dịch chuyên đề, tôi thấy có một số từ cứ lặp đi lặp lại với tần suất lớn. Thí dụ từ I, you, me, is, are,.... và một số dạng bị động của nó. Chúng ta có thể dịch tay (có nghĩa là dịch trực tiếp) rồi đánh máy lại, hay thay thế dùng cách Replace trong chương trình soạn thảo văn bản. Nhưng nó tồn tại các nhược điểm sau:


    1- Nhàm chán vì phải lặp đi lặp lại các từ quen
    2- Khó xem lại ngữ pháp hay cấu trúc câu trong một thời gian dài tiếp tục dịch lại

    Thí dụ dưới đây cho chúng ta thấy các từ đã thay và các từ chưa thay nằm hỗn độn với nhau:

    “Mẹ/Ta đang phái/gửi/sai Mẹ Ta to các con/các bạn vào ngày Thứ mười hai của mỗi tháng [để] nói [cho/với] cách riêng to this nation. If tâm hồn/các con tim không/đừng thay đổi; if the sự thiếu vắng tình yêu trong các tâm hồn is not đã giải quyết; quốc gia/dân tộc của các con/các bạn thay đổi; if the sự thiếu vắng tình yêu trong các tâm hồn is not đã giải quyết; quốc gia/dân tộc của các con/các bạn sẽ (hãy) tiếp tục to chịu đựng internal strife.”


    Nếu không phân biệt chữ đậm chữ nhạt, thì bản văn có dạng sau đây:

    “Mẹ/Ta đang phái/gửi/sai Mẹ Ta to các con/các bạn vào ngày Thứ mười hai của mỗi tháng [để] nói [cho/với] cách riêng to this nation. If tâm hồn/các con tim không/đừng thay đổi; if the sự thiếu vắng tình yêu trong các tâm hồn is not đã giải quyết; quốc gia/dân tộc của các con/các bạn thay đổi; if the sự thiếu vắng tình yêu trong các tâm hồn is not đã giải quyết; quốc gia/dân tộc của các con/các bạn sẽ (hãy) tiếp tục to chịu đựng internal strife.”

    Thật là khó chịu cho người dịch phải không?


    3- Nếu là văn bản hàng ngàn trang thì việc Replace rất nặng nề, khó khả thi.

Như thế hẳn các bạn sẽ nghĩ đến các chương trình dịch thuật chuyên nghiệp. Nhưng lại đụng đến các chi phí, tiền bạc, thời gian học về phần mềm mà chưa chắc gì đã chọn đúng phần mềm cần tìm. Ngoài ra còn chuyện dịch theo kiểu ngôn ngữ của mỗi người thì sao? Bạn cũng phải định nghĩa lại một số cho máy nó hiểu chứ, hay là hết mọi từ đây, nào ai biết được.


TÔI ĐỀ XUẤT MỘT CÁCH BỔ TRỢ KHÁC.


Cách này thực chất là dùng Marco VB trong MS Word để xử lý, theo dạng thay đoạn này = đoạn kia nhưng có lưu lại các từ này thành file .xls được; Cách này có ưu điểm:

1- Lưu trữ được thành file .xls dễ dàng sử dụng
2- Tái sử dụng cho các bản văn tiếng Anh tương tự tiếp theo.
3- Có thể thay thế lập trình trên Word bằng trên Exel

Nhưng dĩ nhiên là có hạn chế, nghĩa là bạn phải tự dịch.

Để mô tả chúng ta cùng xét đoạn văn sau đây làm ví dụ


    Đoạn văn A

    I desire that My children come to Me under this title of Guadalupe, for in this way I will protect their faith.

    "My children, that it is not for your physical well-being I come. But I come to capture and to vanquish your hearts and souls with My Holy Love...

    My coming to you on the Twelfth of each month, to commemorate My Image of Guadalupe, must be a sign to My children of My maternal concern, My call to conversion, and a return to the faith. When I came to Juan Diego, I came to stop pagan rituals and convert the unchurched.

    I will speak most profoundly in a Christmas message to all My children. Tonight, I am blessing you with My Blessing of Holy Love.

    Therefore, see that Satan is the complacency that tries to take over your hearts in this regard. My children, I love you, I pray for all your intentions and intercede for you before the Throne of My Divine Son. Tonight, I impart to you My Motherly Blessing.

    Such a soul could easily lose his way because he does not look within himself but looks outside himself seeking perfection, seeking more exterior grace. I desire salvation for each one of My children. I ask they seek not so much further signs and wonders, but to look at the heart of My message everywhere, there they will find the fullness of their search - Holy Love.

Một trong những cách đơn giản là các bạn (chuyên dịch thuật) sẽ thay thế trong file exel như sau:

    My children = các con của Tôi.
    Me = Tôi
    I = Tôi

Và đoạn văn như sau:

Tôi desire that các con của Tôi come to Tôi under this title of Guadalupe, for in this way Tôi will protect their faith.

”các con của Tôi, that it is not for your physical well-being Tôi come. But Tôi come to capture and to vanquish your hearts and souls with My Holy Love.

My coming to you on the Twelfth of each month, to commemorate My Image of Guadalupe, must be a sign to các con của Tôi of My maternal concern, My call to conversion, and a return to the faith. When Tôi came to Juan Diego, Tôi came to stop pagan rituals and convert the unchurched.

Tôi will speak most profoundly in a Christmas message to all các con của Tôi. Tonight, Tôi am blessing you with My Blessing of Holy Love.

Therefore, see that Satan is the complacency that tries to take over your hearts in this regard. các con của Tôi, Tôi love you, Tôi pray for all your intentions and intercede for you before the Throne of My Divine Son. Tonight, Tôi impart to you My Motherly Blessing.

Such a soul could easily lose his way because he does not look within himself but looks outside himself seeking perfection, seeking more exterior grace. Tôi desire salvation for each one of các con của Tôi. Tôi ask they seek not so much further signs and wonders, but to look at the heart of My message everywhere, there they will find the fullness of their search - Holy Love.


Như thế khi ấy thật khó hiểu được các dạng thức của câu, vì trong tiếng Việt, I, Me đều biến thành "Tôi" cả, không phân biệt nữa. Cả từ "You" bây giờ có thể theo ngữ cảnh lại là "bạn" ; "ông" ; "chú" "bác" .... và trở thành vấn đề nan giải, tự nhiên bản dịch lại rẽ nhánh phức tạp hơn là chưa dịch. Vì vậy tôi đề xuất là dịch theo cụm từ. Tất cả các từ phải dịch theo ngữ nghĩa của nó; hoặc là cụm từ tối thiểu bằng hai từ trở lên và có giữ lại các từ mấu chốt để hiểu.


(còn tiếp)



anhcau
Bài viết: 8
Ngày tham gia: T.Bảy 06/07/2013 1:18 pm

Ứng dụng dịch Tiếng Anh và một số ngoại ngữ trong MS Word

Gửi bàigửi bởi anhcau » T.Năm 22/01/2015 10:59 am

TIẾP SAU ĐÂY LÀ PHẦN MÃ THAY THẾ CÁC TỪ QUA CÁC FILE .xls


1- PHẦN MÃ THI HÀNH


Mã: Chọn hết

Option Explicit
' Chon biên tên_file_chon(1 To 100) nham muc dich giai phóng bô nho cua KQ thôi
Public tên_file_chon(1 To 150) As String '150 files is the maximum applying this code
Public i As Integer
 
Sub ABC()
 ' ----------------------------------------------------- '
' Tao cac ban VietPharse Edit                           '
' Write by:     duongthanh85                            '
' Y!M & Skype:  duongthanhhtd                           '
' Email:        duongdinhthanh@gmail.com                '
' Blog:         www.360.yahoo.com/duongthanhhtd         '
' ----------------------------------------------------- '
   
    Dim CheckFile  As Boolean
    Dim k As Integer
    Dim j As Integer
    Dim Page_hiên_tai As Integer
     
 
     'call a routine that removes all settings from the find dialog
    'so future users of the dialog won't get strange results

   ' Call ClearFindAndReplaceParameters
   
         ' Page_hiên_tai = 0
       
          'get current page
        ' Page_hiên_tai = Selection.Information(wdActiveEndAdjustedPageNumber)
         
         ' Ðánh dâu vi trí lúc Ðó
        ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="xxxx"
       
        Selection.Find.ClearFormatting
       
        Call ClearFindAndReplaceParameters



         Call FileDialogOpen_Multi
   
         
         For j = 1 To i Step 1
         
         CheckFile = VerifyFileABC(tên_file_chon(j))
          If tên_file_chon(j) <> vbNullString And CheckFile = True Then
              'MsgBox "ok xxxxxxxxxx: " & tên_file_chon(j)
              Call trans1(tên_file_chon(j))
         
          Else
            ' Châm dut
              End
          End If
         Next
         
         ' vÊ lai trang hiên thi truoc dó
'Selection.GoTo what:=wdGoToPage, Which:=wdGoToNext, Name:=Page_hiên_tai
 
Call Xoa_hai_khoangtrang

Call ClearFindAndReplaceParameters

' Tro vê vi trí Ðánh dâu và xóa bookmark

'Application.ScreenUpdating = True
On Error Resume Next

Selection.GoTo what:=wdGoToBookmark, Name:="xxxx"

ActiveDocument.Bookmarks("xxxx").Delete

' Xoa bo nho tam
Call ClearClipboard
   
End Sub
Function VerifyFileABC(FileName As String) As Boolean
' ----------------------------------------------------- '
' Kiem tra su ton tai cua mot file                      '
' Write by:     duongthanh85                            '
' Y!M & Skype:  duongthanhhtd                           '
' Email:        duongdinhthanh@gmail.com                '
' Blog:         www.360.yahoo.com/duongthanhhtd         '
' ----------------------------------------------------- '
    On Error Resume Next
    Open FileName For Input As #1
    If Err Then
        MsgBox ("File: " & FileName & " Khong ton tai, kiem tra lai duong dan file data !! Hoac ban da huy chon file. Bon_7_THAYLUONTUEXELL_4")
        VerifyFileABC = False
    Else
        VerifyFileABC = True
    End If
    Close #1
End Function

Sub FileDialogOpen_Multi()
Dim MyDialog As FileDialog
Dim Tâp_hop_cac_tên_file As Variant
Dim KQ As Variant
 

'On Error Resume Next
Set MyDialog = Application.FileDialog(msoFileDialogFilePicker)
        With MyDialog
        .Filters.Clear
        .Filters.Add "All EXELL File ", "*.xls", 1
        .AllowMultiSelect = True
       
                 i = 1
                 If .Show = -1 Then
                    For Each Tâp_hop_cac_tên_file In .SelectedItems
                 
                    tên_file_chon(i) = Tâp_hop_cac_tên_file
                    i = i + 1
                    Next
                   i = i - 1
                    ' ReDim tên_file_chon(Tâp_hop_cac_tên_file)
                   Else
                            MsgBox "Ban chua chon file.[Bon_7_THAYLUONTUEXELL_4]"
                            End
                End If
               
        End With
End Sub

Sub trans1(txtstr As String)

' ----------------------------------------------------- '
' Thuc hien replace tu dong theo File data              '
' Write by:     duongthanh85                            '
' Y!M & Skype:  duongthanhhtd                           '
' Email:        duongdinhthanh@gmail.com                '
' Blog:         www.360.yahoo.com/duongthanhhtd         '
' ----------------------------------------------------- '
    Dim bstartApp As Boolean
    Dim xlapp As Object
    Dim xlbook As Object
    Dim xlsheet As Object
    Dim xlrange1 As Object
   
    Dim iCount As Integer
    Dim tongsotu As Integer
       
   
    Dim MyArray As Variant
    Dim Findarray As Variant
    Dim Replarray As Variant
    Dim string_Findarray() As String
    ' Thu nghiem tam thoi
    Dim KQ As String
      KQ = " "

 
   
    Dim txt_vao1 As String
    Dim txt_vao2 As String
   
   
 
     
    Dim txt_vao As String
   
 
   
   
 
    Dim i, j  As Integer
       'Khai bao Variant
    Dim Arr As Variant
     
   
   
    ' Dêm tu
   
   ' Dim NumCharsBefore As Long, NumCharsAfter As Long
   ' Dim CountWord As Long
   
     
    ' Them 1 khoang trang sau cau can xuong dong
    ' Thaymaytudongiankhongdungwildcads MÂU_TÌM:="([! ])(^13)", MÂU_THAY:="\1 \2", mau_me:=4
     
       
   
   
   
   ' Application.ScreenUpdating = False
   ' Application.ScreenUpdating = True

    'Get the number of chars in the doc BEFORE doing Find & Replace
 
    'CountWord = 0
    'NumCharsBefore = ActiveDocument.Characters.Count

   
     ' Replace theo file txt_vaostr
     
 
   
   
 




On Error Resume Next
Set xlapp = GetObject(, "Excel.Application")
If Err Then
    bstartApp = True
    Set xlapp = CreateObject("Excel.Application")
End If
'On Error GoTo 0
With xlapp
   ' On Error GoTo Err_Handler
    Set xlbook = .Workbooks.Open(txtstr)
    Set xlsheet = xlbook.Worksheets(1)
   
   
    With xlsheet
   
    ' só 4 này tuong duong voi 1 trong 4 hang sô
    ' nó tìm den dòng du lieu cuôi cùng
        Set xlrange1 = .Range("A1", .Range("A1").End(4))
       ' Set xlrange2 = .Range("B1", .Range("B1").End(4))
        Findarray = xlrange1.Value
       
     
       
       
       ' Replarray = xlrange2.Value
    End With
   
End With
If bstartApp = True Then
    xlapp.Quit
End If
Set xlapp = Nothing
Set xlbook = Nothing
Set xlsheet = Nothing
Set xlrange1 = Nothing
 
           
            For i = 1 To UBound(Findarray)
               
           
                j = InStr(Findarray(i, 1), "=")
               
                If j <> 0 Then
                                Arr = Split(Findarray(i, 1), "=", 2)
                                 txt_vao1 = Trim(Arr(0))
                                 txt_vao2 = Arr(1)
                                      If txt_vao2 = vbNullString Then
                                          txt_vao2 = " "
                                           
                                          End
                                      Else
                                              txt_vao2 = Trim(txt_vao2)
                                      End If
                          Else
                                 ' gán các giá tri này = Null se bao loi; cho chuoi bat ky
                                 txt_vao1 = "bbb111bbbccc dd dxxxyyyxzxx"
                                 txt_vao2 = "mâmmamama mmamma mamammamam"
                                 
                   
                End If
               
               
               
                   
                       ' Selection.HomeKey Unit:=wdStory
                        'iCount = 0
                        'Application.ScreenUpdating = False
           
                        With Selection.Find
                          ' .ClearFormatting
                           .MatchCase = False
                           .Text = LÂY_MÂU_TÌM(txt_vao1, txt_vao2)
                         
                                                        ''==================================
                                                        '' Kiêm tra nêu nhu có dâu * hay [ ] ( ) không thì thêm dâu \ o truoc
                                                        ''==================================
                                                        If InStr(txt_vao1, "*") <> 0 Then
                                                               txt_vao1 = Replace(txt_vao1, "*", "\*")
                                                        End If
                                                         
                                                        If InStr(txt_vao1, "[") <> 0 Then
                                                               txt_vao1 = Replace(txt_vao1, "[", "\[")
                                                        End If
                                                       
                                                        If InStr(txt_vao1, "]") <> 0 Then
                                                               txt_vao1 = Replace(txt_vao1, "]", "\]")
                                                        End If
                                                       
                                                        If InStr(txt_vao1, "(") <> 0 Then
                                                               txt_vao1 = Replace(txt_vao1, "(", "\(")
                                                        End If
                                                        If InStr(txt_vao1, ")") <> 0 Then
                                                               txt_vao1 = Replace(txt_vao1, ")", "\)")
                                                        End If
                                                        If InStr(txt_vao1, "{") <> 0 Then
                                                               txt_vao1 = Replace(txt_vao1, "{", "\{")
                                                        End If
                                                         If InStr(txt_vao1, "}") <> 0 Then
                                                               txt_vao1 = Replace(txt_vao1, "}", "\}")
                                                        End If
                                                        ' Hàm txt_vao1 nêu có dâu * se duoc bien doi
                                                        ' Luu ý là LÂY_MÂU_THAY(txt_vao1, txt_vao2) phai o tren khong thi bao loi
                                                       
                                                       
                           .Text = LÂY_MÂU_TÌM(txt_vao1, txt_vao2)
                           .Replacement.Text = LÂY_MÂU_THAY(txt_vao1, txt_vao2)
                                                   
                                                   If ((Left(Trim(txt_vao1), 1) = "|") And (Right(Trim(txt_vao1), 1) = "|")) Then
                                                   
                                                    .Text = "(^13)([ ]{1,2})(" & LÂY_MÂU_TÌM(txt_vao1, txt_vao2) & ")([ ]{1,2})(^13)"
                                                    .Replacement.Text = "\1\2" & LÂY_MÂU_THAY(txt_vao1, txt_vao2) & "\4\5"
                                                   
                                                    End If

                                 
                         
                         
                           
                                                   
                           .Replacement.HIGHLIGHT = True
                           .MatchWholeWord = True
                           .MatchWildcards = True
                                                        ''==================================
                                                        '' Kiêm tra nêu hai ve thay = nhau
                                                        ''==================================
                                                        If txt_vao1 = txt_vao2 Then
                                                               .MatchWildcards = False
                                                               .Text = "bbb111bbbccc dd dxxxyyyxzxx"
                                                               .Replacement.Text = "mâmmamama mmamma mamammamam"
                                                        End If
                                                       
                                                       
                           .MatchSoundsLike = False
                           .MatchAllWordForms = False
                           .Wrap = wdFindContinue
                     
                           
                            ' Loop until Word can no longer
                            ' find the search string and
                            ' count each instance
                                     
                                   
                                            Do While .Execute
                                                                            ''==================================
                                                                            '' Neu can dem tu thi dung icount
                                                                            'iCount = iCount + 1
                                                                            ''==================================
                                                     ' Thay 1 lân
                                                    .Execute Replace:=wdReplaceOne
                                                    ' Chuyen den tu tiep theo
                                                    Selection.MoveRight
                                                                            ''==================================
                                                                            '' Neu can dem tu thi dung icount
                                                                            'iCount = iCount + 1
                                                                            ''==================================
                                                                             'tongsotu = iCount
                                             Loop
                                     
                         End With
                                         
                              '===============Xu ly lan thu 2 cua truong hop co 2 dau "|" o dau va cuoi tu
                             
                              If ((Left(Trim(txt_vao1), 1) = "|") And (Right(Trim(txt_vao1), 1) = "|")) Then
                             
                               With Selection.Find
                                   .ClearFormatting
                                   .MatchCase = False
                                   '   mâutìm = "(^13)([ ]{1,2})(" & A_txt1_mautim & ")(^13)"
                                   ' mâutìm = "(^13)([ ]{1,2})(" & A_txt1_mautim & ")([ ]{1,2})(^13)"
                                    ' mâuthay = "\1\2" & txt2_mauthay & "\4"
                                     ' mâuthay = "\1\2" & txt2_mauthay & "\4\5"
                                 
                                   .Text = "(^13)([ ]{1,2})(" & LÂY_MÂU_TÌM(txt_vao1, txt_vao2) & ")(^13)"
                                 
                                                                ''==================================
                                                                '' Kiêm tra nêu nhu có dâu * hay [ ] ( ) không thì thêm dâu \ o truoc
                                                                ''==================================
                                                                If InStr(txt_vao1, "*") <> 0 Then
                                                                       txt_vao1 = Replace(txt_vao1, "*", "\*")
                                                                End If
                                                                 
                                                                If InStr(txt_vao1, "[") <> 0 Then
                                                                       txt_vao1 = Replace(txt_vao1, "[", "\[")
                                                                End If
                                                               
                                                                If InStr(txt_vao1, "]") <> 0 Then
                                                                       txt_vao1 = Replace(txt_vao1, "]", "\]")
                                                                End If
                                                               
                                                                If InStr(txt_vao1, "(") <> 0 Then
                                                                       txt_vao1 = Replace(txt_vao1, "(", "\(")
                                                                End If
                                                                If InStr(txt_vao1, ")") <> 0 Then
                                                                       txt_vao1 = Replace(txt_vao1, ")", "\)")
                                                                End If
                                                                If InStr(txt_vao1, "{") <> 0 Then
                                                                       txt_vao1 = Replace(txt_vao1, "{", "\{")
                                                                End If
                                                                 If InStr(txt_vao1, "}") <> 0 Then
                                                                       txt_vao1 = Replace(txt_vao1, "}", "\}")
                                                                End If
                                                                ' Hàm txt_vao1 nêu có dâu * se duoc bien doi
                                                                ' Luu ý là LÂY_MÂU_THAY(txt_vao1, txt_vao2) phai o tren khong thi bao loi
                                                               
                                                               
                                   .Text = "(^13)([ ]{1,2})(" & LÂY_MÂU_TÌM(txt_vao1, txt_vao2) & ")(^13)"
                                   .Replacement.Text = "\1\2" & LÂY_MÂU_THAY(txt_vao1, txt_vao2) & "\4"
                                             
                                                           
                                   .Replacement.HIGHLIGHT = True
                                   .MatchWholeWord = True
                                   .MatchWildcards = True
                                                                ''==================================
                                                                '' Kiêm tra nêu hai ve thay = nhau
                                                                ''==================================
                                                                If txt_vao1 = txt_vao2 Then
                                                                       .MatchWildcards = False
                                                                       .Text = "bbb111bbbccc dd dxxxyyyxzxx"
                                                                       .Replacement.Text = "mâmmamama mmamma mamammamam"
                                                                End If
                                                               
                                                               
                                   .MatchSoundsLike = False
                                   .MatchAllWordForms = False
                                   .Wrap = wdFindContinue
                                   '.Execute Replace:=wdReplaceAll
                                   ' Loop until Word can no longer
                                    ' find the search string and
                                    ' count each instance
                                     
                                   
                                            Do While .Execute
                                                                            ''==================================
                                                                            '' Neu can dem tu thi dung icount
                                                                            'iCount = iCount + 1
                                                                            ''==================================
                                                     ' Thay 1 lân
                                                    .Execute Replace:=wdReplaceOne
                                                    ' Chuyen den tu tiep theo
                                                    Selection.MoveRight
                                                                            ''==================================
                                                                            '' Neu can dem tu thi dung icount
                                                                            'iCount = iCount + 1
                                                                            ''==================================
                                                                             'tongsotu = iCount
                                             Loop
                                     
                                     
                                 End With
                            End If
                           
                            ' Neu truong hop co "|" o phia sau thi thêm 1 truong hop nua
                           
                           
                                             
                        ' Call ClearClipboard
                         
                       '  Application.ScreenUpdating = True
                       '  ActiveDocument.UndoClear
                        ' Selection.Find.ClearFormatting
                Next i
           
                                                          ' MsgBox j
                                               
                                                         '  MsgBox KQ
                                               
 
 'Get the number of chars AFTER doing Find & Replace
 'NumCharsAfter = ActiveDocument.Characters.Count

'Calculate of the number of replacements,
'and put the result into the function name variable
 'CountWord = NumCharsAfter - NumCharsBefore
 
 

 
 'Hien thi
' MsgBox "Da thay the: " & CountWord & _
                        " ky tu trong lan nay ", vbInformation
 'call a routine that removes all settings from the find dialog
'so future users of the dialog won't get strange results

'Thaymaytudongiankhongdungwildcads MÂU_TÌM:="  ", MÂU_THAY:=" ", mau_me:=5


'Err_Handler:
          '  Exit Sub

End Sub
 
Sub FileDialogOpen()
Dim item As Long
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Title = "Chon file .xls de mo va thay the"
.FilterIndex = 1 '<- 1 là doc, 2 là text nhu' o' trên Ðã khai
.Show
item = .SelectedItems.Count
If item = 0 Then
selectedFilenameABC = ""
Else
selectedFilenameABC = .SelectedItems(item)
End If
End With
End Sub
Sub ClearClipboard()
  Dim oDataObject As DataObject
   Set oDataObject = New DataObject
  oDataObject.SetText ""
  oDataObject.PutInClipboard
  Set oDataObject = Nothing
End Sub
Sub ClearFindAndReplaceParameters()
        With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        End With

End Sub

Function LÂY_MÂU_TÌM(A_txt1 As String, A_txt2 As String) As String

       
    Dim A_txt1_co_dau_truoc_tu_khong As Integer
    Dim A_txt1_co_dau_sau_tu_khong As Integer
     
   
    Dim A_txt1_dau_truoc As String
    Dim A_txt1_mautim As String
    Dim A_txt1_dau_sau As String
   
   
   Dim Accc As String
   Dim Addd As String
   
   Dim Agach1, Agach2, Agach3, Akhoang_trang As String
    Dim mâutìm As String
   
    ' Các hàng sô
      Akhoang_trang = " "
      Addd = "([\\\[\],.;:\?\!\-\""\“\{\}\)\(])"
      Accc = "([\\\[\],.;:\?\!\-\""\“\{\}\)\(])"
      Agach1 = "\1"
      Agach2 = "\2"
      Agach3 = "\3"
   
      '1- Cu gán dai biên truoc da
     
      A_txt1_dau_truoc = Left(Trim(A_txt1), 1)
      A_txt1_dau_sau = Right(Trim(A_txt1), 1)
     
    '  A_txt2 = A_txt2
     
      '2-Dat biên kiêm tra xem dang truoc hay là sau co dâu hay khong
     
      ' 2a-voi A_txt1
      ' Dâu truoc
      Select Case A_txt1_dau_truoc
             Case ",", ".", ";", ":", """", "-", "'", "!", "?", "{", "}", "“"
                  ' Nêu A_txt1_dau_truoc là , . ; ' : vv thì là có = 1
                  A_txt1_co_dau_truoc_tu_khong = 1
             Case "|"
                  ' Nêu A_txt1_dau_truoc là , . ; ' : vv thì là có = 1
                  A_txt1_co_dau_truoc_tu_khong = 10
             Case Else
                  A_txt1_co_dau_truoc_tu_khong = 0
       End Select
       'Dâu sau
        Select Case A_txt1_dau_sau
             Case ",", ".", ";", ":", """", "-", "'", "!", "?", "{", "}", "“"
                  ' Nêu A_txt1_dau_sau là , . ; ' : vv thì là có = 1
                  A_txt1_co_dau_sau_tu_khong = 1
            Case "|"
                  ' Nêu A_txt1_dau_sau là , . ; ' : vv thì là có = 1
                  A_txt1_co_dau_sau_tu_khong = 10
             Case Else
                  A_txt1_co_dau_sau_tu_khong = 0
       End Select
   
         
       
        'Dinh nghia lai món .Text = A_txt1 o phía trên kia
        '3- Kiêm tra voi 4 loai phuong án cua A_txt1, roi thang A_txt2 thi an theo
            If (A_txt1_co_dau_truoc_tu_khong = 1) And (A_txt1_co_dau_sau_tu_khong = 1) Then
           
                            A_txt1_mautim = Trim(Mid(Trim(A_txt1), 2, Len(Trim(A_txt1)) - 2))
                           mâutìm = Addd & "( " & A_txt1_mautim & " )" & Accc
                         
               Else
               
                    If (A_txt1_co_dau_truoc_tu_khong = 1) And (A_txt1_co_dau_sau_tu_khong = 0) Then
                   
                                A_txt1_mautim = Trim(Mid(Trim(A_txt1), 2, Len(Trim(A_txt1)) - 1))
                                mâutìm = Addd & "( " & A_txt1_mautim & " )"
                      Else
                        If (A_txt1_co_dau_truoc_tu_khong = 0) And (A_txt1_co_dau_sau_tu_khong = 1) Then
                       
                             A_txt1_mautim = Trim(Mid(Trim(A_txt1), 1, Len(Trim(A_txt1)) - 1))
                           mâutìm = "( " & A_txt1_mautim & " )" & Accc
                         Else
                            If (A_txt1_co_dau_truoc_tu_khong = 0) And (A_txt1_co_dau_sau_tu_khong = 0) Then
             
                                 A_txt1_mautim = Trim(A_txt1)
                                mâutìm = Akhoang_trang & A_txt1_mautim & Akhoang_trang
                               
                               
                                'Bo sung them 5 truong hop co dau "|" nua
                                ' Xu ly truong hop co "|" ca truoc va sau tu thi thay the thu cong nhu tren kia
                                Else
                                        ' Co ca "|" truoc va sau tu
                                        If (A_txt1_co_dau_truoc_tu_khong = 10) And (A_txt1_co_dau_sau_tu_khong = 10) Then
                   
                                    A_txt1_mautim = Trim(Mid(Trim(A_txt1), 2, Len(Trim(A_txt1)) - 2))
                                   
                                    mâutìm = A_txt1_mautim
                                '   mâutìm = "(^13)([ ]{1,2})(" & A_txt1_mautim & ")(^13)"
                                  ' mâutìm = "(^13)([ ]{1,2})(" & A_txt1_mautim & ")([ ]{1,2})(^13)"
   ' Thaycáidâunhé MÂU_TÌM:=Chr(13) & "([ ]{1,2})(Cublic)" & Chr(13), MÂU_THAY:=Chr(13) & "\1 \2phuong an 1" & Chr(13), mau_me:=5
    ' Thaycáidâunhé MÂU_TÌM:=Chr(13) & "(Cublic)" & Chr(13), MÂU_THAY:=Chr(13) & "\1 \2phuong an 2" & Chr(13), mau_me:=5
   ' Thaycáidâunhé MÂU_TÌM:=Chr(13) & "(Cublic )" & Chr(13), MÂU_THAY:=Chr(13) & "\1 \2phuong an 3" & Chr(13), mau_me:=5
   ' Thaycáidâunhé MÂU_TÌM:=Chr(13) & "([ ]{1,2})(Cublic)([ ]{1,2})" & Chr(13), MÂU_THAY:=Chr(13) & "\1 \2 \3phuong an 4" & Chr(13), mau_me:=5
     
      '   Thaycáidâunhé MÂU_TÌM:="(lic)([ ]{1,2})" & Chr(13), MÂU_THAY:="\1 yyyy" & Chr(13), mau_me:=5
                                   Else
                                        ' Co "|" truoc con sau tu la khoang trang
                                        If (A_txt1_co_dau_truoc_tu_khong = 10) And (A_txt1_co_dau_sau_tu_khong = 0) Then
                                       
                                                    A_txt1_mautim = Trim(Mid(Trim(A_txt1), 2, Len(Trim(A_txt1)) - 1))
                                                    mâutìm = Chr(13) & "([ ]{1,2})(" & A_txt1_mautim & " )"
                                        Else
                                        ' Co "|" truoc con sau tu la co dau
                                        If (A_txt1_co_dau_truoc_tu_khong = 10) And (A_txt1_co_dau_sau_tu_khong = 1) Then
                                       
                                                    A_txt1_mautim = Trim(Mid(Trim(A_txt1), 2, Len(Trim(A_txt1)) - 2))
                                                    mâutìm = "(^13)([ ]{1,2})(" & A_txt1_mautim & ")([ ]{1,2})" & Accc
                                                   
                                                    Else
                                                        ' Khong co "|" truoc tu ma co o sau, con truoc tu la co dau ;,.
                                                        If (A_txt1_co_dau_truoc_tu_khong = 1) And (A_txt1_co_dau_sau_tu_khong = 10) Then
                                                       
                                                             A_txt1_mautim = Trim(Mid(Trim(A_txt1), 2, Len(Trim(A_txt1)) - 2))
                                                           mâutìm = Addd & "([ ]{1,2})(" & A_txt1_mautim & ")([ ]{1,2})(^13)"
                                                       
                                                        Else
                                                        ' Khong co "|" truoc tu ma co o sau, con truoc tu la khong co dau
                                                        If (A_txt1_co_dau_truoc_tu_khong = 0) And (A_txt1_co_dau_sau_tu_khong = 10) Then
                                                       
                                                             A_txt1_mautim = Trim(Mid(Trim(A_txt1), 1, Len(Trim(A_txt1)) - 1))
                                                           mâutìm = "([ ]{1,2})(" & A_txt1_mautim & ")([ ]{1,2})" & Chr(13)
                                                End If
                                            End If
                                         End If
                                       End If
                                End If
                            End If
                        End If
                      End If
               End If
               
               ' Gán hàm vào biên mautim
               LÂY_MÂU_TÌM = mâutìm
         
End Function
Function LÂY_MÂU_THAY(txt1 As String, txt2 As String) As String
 
    Dim m  As Integer
    Dim n  As Integer
    Dim txt1_co_dau_truoc_tu_khong As Integer
    Dim txt1_co_dau_sau_tu_khong As Integer
   
    Dim txt2_co_dau_truoc_tu_khong As Boolean
    Dim txt2_co_dau_sau_tu_khong As Boolean
   
   
    Dim txt1_dau_truoc As String
    Dim txt1_mautim As String
    Dim txt1_dau_sau As String
   
    Dim txt2_dau_truoc As String
    Dim txt2_mauthay As String
    Dim txt2_dau_sau As String
   
   ' Khai báo các biên moi
    Dim mâuthay As String
    Dim txt1_arr() As String
    Dim txt2_arr() As String
    Dim ttt() As String
    Dim xxx() As String
   
    Dim themtu_dau, themtu_sau As Integer
    Dim ccc, ddd, gach1, gach2, gach3, khoang_trang As String
     ' Các hàng sô
      khoang_trang = " "
      ddd = "([\\\[\],.;:\?\!\-\""\“\{\}\)\(])"
      ccc = "([\\\[\],.;:\?\!\-\""\“\{\}\)\(])"
      gach1 = "\1"
      gach2 = "\2"
      gach3 = "\3"
     
     ' Gan cai này là ""
      txt2_mauthay = ""
   
    '1 - Thu tuc xoa dâu ",", ".", ";", ":", """", "-", "'", "!", "?", "/", "[", "]", "{", "}"
    '    truoc va sau txt2 nêu có. Gia su nhu co thi cho la "" (emty)
   
    '1a- Cu gán dai biên truoc da
                                                                                           
        ' mâu thay thê
        txt2_dau_truoc = Left(Trim(txt2), 1)
        txt2_dau_sau = Right(Trim(txt2), 1)
        ' Kiem tra dau cua txt2 voi các truong hop cu the
       
           ' Dâu truoc
           Select Case txt2_dau_truoc
                  Case ",", ".", ";", ":", """", "-", "'", "!", "?", "{", "}", "“", "|"
                       ' Nêu txt2_dau_truoc là , . ; ' : vv thì là có = TRUE
                       txt2_co_dau_truoc_tu_khong = True
                  Case Else
                       txt2_co_dau_truoc_tu_khong = False
            End Select
            'Dâu sau
             Select Case txt2_dau_sau
                  Case ",", ".", ";", ":", """", "-", "'", "!", "?", "{", "}", "“", "|"
                       ' Nêu txt2_dau_sau là , . ; ' : vv thì là có = TRUE
                       txt2_co_dau_sau_tu_khong = True
                  Case Else
                       txt2_co_dau_sau_tu_khong = False
            End Select
                                                                       
            ' Cu the
                                                                       
                   If (txt2_co_dau_truoc_tu_khong = True) And (txt2_co_dau_sau_tu_khong = True) Then
       
                                    ' Dat lai txt2
                                       txt2 = Trim(Mid(Trim(txt2), 2, Len(Trim(txt2)) - 2))
                                   
                      Else
                     
                           If (txt2_co_dau_truoc_tu_khong = True) And (txt2_co_dau_sau_tu_khong = False) Then
                           
                                    ' Dat lai txt2
                                       txt2 = Trim(Mid(Trim(txt2), 2, Len(Trim(txt2)) - 1))
                                       
                             Else
                               If (txt2_co_dau_truoc_tu_khong = False) And (txt2_co_dau_sau_tu_khong = True) Then
                                 
                                    ' Dat lai txt2
                                      txt2 = Trim(Mid(Trim(txt2), 1, Len(Trim(txt2)) - 1))
                                   
                                Else
                                   If (txt2_co_dau_truoc_tu_khong = False) And (txt2_co_dau_sau_tu_khong = False) Then
                                       ' Dat lai txt2
                                        txt2 = Trim(txt2)
                                       
                                   End If
                               End If
                             End If
                      End If
                     
  '2- Gán giá tri mang cho txt1_arr,txt2_arr túc là khai báo dang mang ARRAY
    txt2 = txt2
   
   ' If (InStr(txt1, " ") <> 0 And InStr(txt2, " ") <> 0) Then
   
    txt1_arr() = Split(Trim(txt1), " ")
    txt2_arr() = Split(Trim(txt2), " ") ' Lúc này thì txt2 không còn dâu sau hay truoc nua, do dã xu lý o tren muc 1 rôi
          ' Nho phai có dâu () sau txt1_arr,txt2_arr dê nó hiêu là mang ARRAY

        ' 2a-voi txt1
         ' 2a-voi txt1
         
          ' Dâu truoc
    If txt1_arr(0) <> Empty Then
          Select Case txt1_arr(0)
                 Case ",", ".", ";", ":", """", "-", "'", "!", "?", "{", "}", """"
                      ' Nêu txt1_dau_truoc là , . ; ' : vv thì là có = 1
                      txt1_co_dau_truoc_tu_khong = 1
                 Case "|"
                      ' Nêu txt1_dau_truoc là | thì là có = 10
                      txt1_co_dau_truoc_tu_khong = 10
                 Case Else
                      txt1_co_dau_truoc_tu_khong = 0
           End Select
    End If
           'Dâu sau
    If txt1_arr(UBound(txt1_arr)) <> Empty Then
            Select Case txt1_arr(UBound(txt1_arr))
                 Case ",", ".", ";", ":", """", "-", "'", "!", "?", "{", "}", """"
                      ' Nêu txt1_dau_sau là , . ; ' : vv thì là có = 1
                      txt1_co_dau_sau_tu_khong = 1
                 Case "|"
                      ' Nêu txt1_dau_sau là | thì là có = 10
                      txt1_co_dau_sau_tu_khong = 10
                 Case Else
                      txt1_co_dau_sau_tu_khong = 0
           End Select
    End If
           
 
        'Rât quan trong dây nhé
        '2b-voi txt2_arr(o)
           ' Phân tu so 1
           
        ' Kiêm tra neu nhu txt2 khac chuoi " " thì moi thi hanh lenh nay, neu không thì không doc ma lenh này dê tránh lôi, chua thu cac
        ' dong ma voi truong hop la chuoi " "
        If Trim(txt2) <> "" Then
           
                If txt2_arr(0) <> Empty Then
                 
                          Select Case txt2_arr(0)
                                Case "+1", "1+", "+1+", "+01", "01+", "+01+", "01", "1"
                                     ' Thì thêm 1 tu [dau cong]
                                     themtu_dau = 10
                                Case "*1", "1*", "*1*", "*01", "01*", "*01*", "*"
                                     ' Thì thêm 1 tu [dau *]
                                     themtu_dau = 1
                                Case "+2", "2+", "+2+", "+02", "02+", "+02+", "02", "2"
                                     ' Thì thêm 2 tu [dau cong]
                                     themtu_dau = 20
                                Case "*2", "2*", "*2*", "*02", "02*", "*02*"
                                     ' Thì thêm 2 tu [dau *]
                                     themtu_dau = 2
                                Case "+3", "3+", "+3+", "+03", "03+", "+03+", "03", "3"
                                     ' Thì thêm 3 tu [dau cong]
                                     themtu_dau = 30
                                Case "*3", "3*", "*3*", "*03", "03*", "*03*"
                                     ' Thì thêm 3 tu [dau *]
                                     themtu_dau = 3
                                Case Else
                                     themtu_dau = 0
                          End Select
                         
                         
                   End If
            'Phân tu so 2
           
                If txt2_arr(UBound(txt2_arr)) <> Empty Then
                         Select Case txt2_arr(UBound(txt2_arr))
                                Case "+1", "1+", "+1+", "+01", "01+", "+01+", "01", "1"
                                    ' Thì thêm 1 tu [dau cong]
                                    themtu_sau = 10
                               Case "*1", "1*", "*1*", "*01", "01*", "*01*", "*"
                                    ' Thì thêm 1 tu [dau *]
                                    themtu_sau = 1
                               Case "+2", "2+", "+2+", "+02", "02+", "+02+", "02", "2"
                                    ' Thì thêm 2 tu [dau cong]
                                    themtu_sau = 20
                               Case "*2", "2*", "*2*", "*02", "02*", "*02*"
                                    ' Thì thêm 2 tu [dau *]
                                    themtu_sau = 2
                               Case "+3", "3+", "+3+", "+03", "03+", "+03+", "03", "3"
                                    ' Thì thêm 3 tu [dau cong]
                                    themtu_sau = 30
                               Case "*3", "3*", "*3*", "*03", "03*", "*03*"
                                    ' Thì thêm 3 tu [dau *]
                                    themtu_sau = 3
                               Case Else
                                    themtu_sau = 0
                         End Select
                     
                 End If
    End If
   
   
   
' Cac truong hop xay ra cua tu truoc.
' Neu nhu có dâu truoc tu txt1 thì bo qua anh huong txt1_arr(0) noi txt2_arr(0)

    If txt1_co_dau_truoc_tu_khong = 0 Then
                   
                    If themtu_dau = 10 Then
                             
                            txt2_arr(0) = txt1_arr(0) & " +"
                    Else
                         If themtu_dau = 1 Then
                           
                               txt2_arr(0) = txt1_arr(0) & " *"
                         Else
                              If themtu_dau = 20 Then
                                           If (UBound(txt1_arr) + 1) = 1 Then
                                                'Nhay den *///* - tuc la khong lam ji ca
                                                ' Coi nhu nhap sai so
                                              Else
                                                  If (UBound(txt1_arr) + 1) = 2 Then
                                                     txt2_arr(0) = txt1_arr(0) & " " & txt1_arr(1) & " +"
                                                  Else
                                                        txt2_arr(0) = txt1_arr(0) & " " & txt1_arr(1) & " +"
                                                   End If
                                            End If
                                     
                               Else
                                    If themtu_dau = 2 Then
                                        If (UBound(txt1_arr) + 1) = 1 Then
                                                'Nhay den *///* - tuc la khong lam ji ca
                                                ' Coi nhu nhap sai so
                                              Else
                                                  If (UBound(txt1_arr) + 1) = 2 Then
                                                     txt2_arr(0) = txt1_arr(0) & " " & txt1_arr(1) & " *"
                                                  Else
                                                     txt2_arr(0) = txt1_arr(0) & " " & txt1_arr(1) & " *"
                                                   End If
                                            End If
                                    Else
                                        If themtu_dau = 30 Then
                                          If (UBound(txt1_arr) + 1) = 1 Then
                                                'Nhay den *///* - tuc la khong lam ji ca
                                                ' Coi nhu nhap sai so
                                                Else
                                                    If (UBound(txt1_arr) + 1) = 2 Then
                                                       'Nhay den *///* - tuc la khong lam ji ca
                                                       ' Coi nhu nhap sai so
                                                        Else
                                                            If (UBound(txt1_arr) + 1) = 3 Then
                                                               txt2_arr(0) = txt1_arr(0) & " " & txt1_arr(1) & " " & txt1_arr(2) & " +"
                                                             Else
                                                                txt2_arr(0) = txt1_arr(0) & " " & txt1_arr(1) & " " & txt1_arr(2) & " +"
                                                           
                                                            End If
                                                    End If
                                            End If
                                           
                                        Else
                                             If themtu_dau = 3 Then
                                                If (UBound(txt1_arr) + 1) = 1 Then
                                                'Nhay den *///* - tuc la khong lam ji ca
                                                ' Coi nhu nhap sai so
                                                Else
                                                    If (UBound(txt1_arr) + 1) = 2 Then
                                                       'Nhay den *///* - tuc la khong lam ji ca
                                                       ' Coi nhu nhap sai so
                                                        Else
                                                            If (UBound(txt1_arr) + 1) = 3 Then
                                                               txt2_arr(0) = txt1_arr(0) & " " & txt1_arr(1) & " " & txt1_arr(2) & " *"
                                                             Else
                                                                ' Nhay den *///*
                                                                ' Coi nhu nhap sai so
                                                             End If
                                                    End If
                                              End If
                                            Else
                                               ' Dieu kien là *///* Dieu kiên cuôi cung la o dây, tât ca nhay vao dây
                                            End If
                                        End If
                                    End If
                              End If
                        End If
                    End If
             
      End If
 
   ' Cac truong hop xay ra cua tu sau

    If txt1_co_dau_sau_tu_khong = 0 Then
   
         If themtu_sau = 10 Then
                   txt2_arr(UBound(txt2_arr)) = "+ " & txt1_arr(UBound(txt1_arr))
                    Else
                         If themtu_sau = 1 Then
                            txt2_arr(UBound(txt2_arr)) = "* " & txt1_arr(UBound(txt1_arr))
                         Else
                              If (themtu_sau = 20 And themtu_sau <= (UBound(txt1_arr) + 1) * 10) Then
                               
                               txt2_arr(UBound(txt2_arr)) = "+ " & txt1_arr(UBound(txt1_arr) - 1) & " " & txt1_arr(UBound(txt1_arr))
                               
                               Else
                                    If (themtu_sau = 2 And themtu_sau <= (UBound(txt1_arr) + 1)) Then
                                         txt2_arr(UBound(txt2_arr)) = "* " & txt1_arr(UBound(txt1_arr) - 1) & " " & txt1_arr(UBound(txt1_arr))
                                    Else
                                        If (themtu_sau = 30 And themtu_sau <= (UBound(txt1_arr) + 1) * 10) Then
                                            txt2_arr(UBound(txt2_arr)) = "+ " & txt1_arr(UBound(txt1_arr) - 2) & " " & _
                                                                                txt1_arr(UBound(txt1_arr) - 1) & " " & _
                                                                                txt1_arr(UBound(txt1_arr))
                                        Else
                                            If (themtu_sau = 3 And themtu_sau <= (UBound(txt1_arr) + 1)) Then
                                            txt2_arr(UBound(txt2_arr)) = "* " & txt1_arr(UBound(txt1_arr) - 2) & " " & _
                                                                                txt1_arr(UBound(txt1_arr) - 1) & " " & _
                                                                                txt1_arr(UBound(txt1_arr))
                                               
                                            Else
                                                     
                                            End If
                                        End If
                                    End If
                              End If
                        End If
                    End If

      End If
 
                 
           
    '3- Kiêm tra voi 4 loai phuong án cua txt2, tuong ung voi txt1
        ' - muc 3.1
       
        If (txt1_co_dau_truoc_tu_khong = 1) And (txt1_co_dau_sau_tu_khong = 1) Then
       
                   ' Kiêm tra xem dau truoc và dâu sau cua txt2 co vào dung hay không so voi quy dinh
                   ' Nêu co dau thi bo cac dau này di, thay vào do là dùng \1 cho dâu dâu
                                                                        '  \3 cho dâu cuôi mâu doan van
                   ' Cái này là chung cho các mâu if o duoi day, chi khac nhau o phân .Replacement.Text
                                                                       
                    For m = 0 To UBound(txt2_arr)
                     
                           If txt2_arr(m) <> Empty Then
                                 ' Noi chuoi lai voi nha
                                 
                                 txt2_mauthay = txt2_mauthay & txt2_arr(m) & " "
                                 
                            End If
                    Next m
                 
                   
                    txt2_mauthay = Trim(txt2_mauthay)
           
                    mâuthay = gach1 & " " & txt2_mauthay & " " & gach3
                     
           Else
                ' - muc 3.2
                If (txt1_co_dau_truoc_tu_khong = 1) And (txt1_co_dau_sau_tu_khong = 0) Then
                       ' Kiêm tra xem dau truoc và dâu sau cua txt2 co vào dung hay không so voi quy dinh
                       ' Nêu co dau thi bo cac dau này di, thay vào do là dùng \1 cho dâu dâu
                                                                            '  \3 cho dâu cuôi mâu doan van
                       ' Cái này là chung cho các mâu if o duoi day, chi khac nhau o phân .Replacement.Text
                                                                           
                       
                        ' Mâu thay thê se duoc sua dôi moi lai nhu sau trong ô .Replacement.Text
                         
                          For m = 0 To UBound(txt2_arr)
                     
                            If txt2_arr(m) <> Empty Then
                                  ' Noi chuoi lai voi nha
                                 
                                  txt2_mauthay = txt2_mauthay & txt2_arr(m) & " "
                                 
                             End If
                         Next m
                 
                   
                           txt2_mauthay = Trim(txt2_mauthay)
                       
                           mâuthay = gach1 & " " & txt2_mauthay & khoang_trang
                           
                  Else
                    ' - muc 3.3
                    If (txt1_co_dau_truoc_tu_khong = 0) And (txt1_co_dau_sau_tu_khong = 1) Then
                   
                       ' Kiêm tra xem dau truoc và dâu sau cua txt2 co vào dung hay không so voi quy dinh
                       ' Nêu co dau thi bo cac dau này di, thay vào do là dùng \1 cho dâu dâu
                                                                            '  \3 cho dâu cuôi mâu doan van
                       ' Cái này là chung cho các mâu if o duoi day, chi khac nhau o phân .Replacement.Text
                                                                           
                       
                        ' Mâu thay thê se duoc sua dôi moi lai nhu sau trong ô .Replacement.Text
                            For m = 0 To UBound(txt2_arr)
                       
                               If txt2_arr(m) <> Empty Then
                                     ' Noi chuoi lai voi nha
                                     
                                     txt2_mauthay = txt2_mauthay & txt2_arr(m) & " "
                                     
                                End If
                            Next m
                   
                   
                           txt2_mauthay = Trim(txt2_mauthay)
                           mâuthay = khoang_trang & txt2_mauthay & " " & gach2
                           
                     Else
                     
                        ' - muc 3.4
                        If (txt1_co_dau_truoc_tu_khong = 0) And (txt1_co_dau_sau_tu_khong = 0) Then
         
                           ' Kiêm tra xem dau truoc và dâu sau cua txt2 co vào dung hay không so voi quy dinh
                           ' Nêu co dau thi bo cac dau này di, thay vào do là dùng \1 cho dâu dâu
                                                                                '  \3 cho dâu cuôi mâu doan van
                           ' Cái này là chung cho các mâu if o duoi day, chi khac nhau o phân .Replacement.Text
                                                                               
                                                                               
                           
                            ' Mâu thay thê se duoc sua dôi moi lai nhu sau trong ô .Replacement.Text
                                    For m = 0 To UBound(txt2_arr)
                           
                                     If txt2_arr(m) <> Empty Then
                                         ' Noi chuoi lai voi nha
                                         
                                         txt2_mauthay = txt2_mauthay & txt2_arr(m) & " "
                                         
                                      End If
                                     Next m
                 
                   
                                    txt2_mauthay = Trim(txt2_mauthay)
                                    mâuthay = khoang_trang & txt2_mauthay & khoang_trang
                                   
   
    '==============================================================
    '* Phân nay kiêm tra va them sau voi 5 loai phuong án cua txt2
    '  khi co dau "|", tuong ung voi txt1
    '  duoc bo sung sau nay
    '  Neu nhu chay khong chuan co the xoa tu khuc nay
    '  Quy uoc txt1_co_dau_truoc_tu_khong = 1 va txt1_co_dau_truoc_tu_khong = 10
    '          txt1_co_dau_sau_tu_khong = 1 va txt1_co_dau_sau_tu_khong = 10
    ' tuc la co 2 truong hop nhu vay
    '==============================================================
       
        Else
                If (txt1_co_dau_truoc_tu_khong = 10) And (txt1_co_dau_sau_tu_khong = 10) Then
       
                   ' Kiêm tra xem dau truoc và dâu sau cua txt2 co vào dung hay không so voi quy dinh
                   ' Nêu co dau thi bo cac dau này di, thay vào do là dùng \1 cho dâu dâu
                                                                        '  \3 cho dâu cuôi mâu doan van
                   ' Cái này là chung cho các mâu if o duoi day, chi khac nhau o phân .Replacement.Text
                   
                   ' muc (a)
                    For m = 0 To UBound(txt2_arr)
                     
                           If txt2_arr(m) <> Empty Then
                                 ' Noi chuoi lai voi nha
                                 
                                 txt2_mauthay = txt2_mauthay & txt2_arr(m) & " "
                                 
                            End If
                    Next m
                 
                   
                    txt2_mauthay = Trim(txt2_mauthay)
                       
                       
                     mâuthay = txt2_mauthay
                   
                   ' mâuthay = "\1\2" & txt2_mauthay & "\4"
                    ' mâuthay = "\1\2" & txt2_mauthay & "\4\5"
                   
                                   
                Else
                       If (txt1_co_dau_truoc_tu_khong = 10) And (txt1_co_dau_sau_tu_khong = 1) Then
                          ' Nhu muc (a) tren
                          ' chi khac la co cai duoi
                          ' muc (b)
                          '  mâutìm = "(^13)([ ]{1,2})(" & A_txt1_mautim & ")([ ]{1,2})" & Accc
                          For m = 0 To UBound(txt2_arr)
                         
                               If txt2_arr(m) <> Empty Then
                                     ' Noi chuoi lai voi nha
                                     
                                     txt2_mauthay = txt2_mauthay & txt2_arr(m) & " "
                                     
                                End If
                        Next m
                     
                       
                        txt2_mauthay = Trim(txt2_mauthay)
               
                        mâuthay = "\1\2" & txt2_mauthay & "\4\5"
                                 
                    Else
                           If (txt1_co_dau_truoc_tu_khong = 10) And (txt1_co_dau_sau_tu_khong = 0) Then
                              ' Nhu muc (3.2) tren
                              ' muc (c)
                             
                              For m = 0 To UBound(txt2_arr)
                       
                               If txt2_arr(m) <> Empty Then
                                     ' Noi chuoi lai voi nha
                                     
                                     txt2_mauthay = txt2_mauthay & txt2_arr(m) & " "
                                     
                                End If
                            Next m
                   
                       
                              txt2_mauthay = Trim(txt2_mauthay)
                           
                              mâuthay = Chr(13) & "\1" & txt2_mauthay & khoang_trang
                             
                         Else
                              ' Nhu muc (3.3) tren
                              ' muc (d)
                            If (txt1_co_dau_truoc_tu_khong = 0) And (txt1_co_dau_sau_tu_khong = 10) Then
                             
                                ' Kiêm tra xem dau truoc và dâu sau cua txt2 co vào dung hay không so voi quy dinh
                                ' Nêu co dau thi bo cac dau này di, thay vào do là dùng \1 cho dâu dâu
                                                                                     '  \3 cho dâu cuôi mâu doan van
                                ' Cái này là chung cho các mâu if o duoi day, chi khac nhau o phân .Replacement.Text
                                                                                     
                               
                                 ' Mâu thay thê se duoc sua dôi moi lai nhu sau trong ô .Replacement.Text
                                     For m = 0 To UBound(txt2_arr)
                                 
                                        If txt2_arr(m) <> Empty Then
                                              ' Noi chuoi lai voi nha
                                             
                                              txt2_mauthay = txt2_mauthay & txt2_arr(m) & " "
                                             
                                         End If
                                     Next m
                             
                             
                                    txt2_mauthay = Trim(txt2_mauthay)
                                    mâuthay = "\1" & txt2_mauthay & "\3" & Chr(13)
                                   
                                   
                            Else
                              ' Nhu muc (3.1) tren
                              ' muc (e)
                               If (txt1_co_dau_truoc_tu_khong = 1) And (txt1_co_dau_sau_tu_khong = 10) Then
                               For m = 0 To UBound(txt2_arr)
                     
                                If txt2_arr(m) <> Empty Then
                                      ' Noi chuoi lai voi nha
                                     
                                      txt2_mauthay = txt2_mauthay & txt2_arr(m) & " "
                                 
                                End If
                                        Next m
                                     
                                       
                                        txt2_mauthay = Trim(txt2_mauthay)
                               
                                        mâuthay = "\1\2" & txt2_mauthay & "\4\5"
                                   
                           End If
                        End If
                    End If
                  End If
                            End If
                        End If
                    End If
                  End If
           End If
             
             
                                                           
 

        ' Gán hàm vào biên mâuthay
         LÂY_MÂU_THAY = mâuthay

End Function

 Public Sub SearchAndReplaceInStory_EXELL(ByVal strSearch As Variant, ByVal strReplace As Variant)
    Dim iCount As Integer
        With Selection.Find
                                         
           .MatchCase = False
           .Text = strSearch
           .Replacement.Text = strReplace
           .Replacement.HIGHLIGHT = True
           .MatchWholeWord = True
           .MatchWildcards = True
           .MatchSoundsLike = False
           .MatchAllWordForms = False
           .Wrap = wdFindContinue
           .Execute Replace:=wdReplaceAll
           
    End With
End Sub
Private Sub Tìm_va_thay_ngay_tung_tu_môt()

With Selection.Find
   .Execute Replace:=wdReplaceOne
 
    While .Found
       .Execute Replace:=wdReplaceOne
    Wend
 End With
 End Sub
 Private Sub Thaymaytudongiankhongdungwildcads(MÂU_TÌM As String, MÂU_THAY As String, _
                                             Optional ByVal Loai As Integer = 0, Optional ByVal mau_me As Integer = 4)
    On Error Resume Next
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        Select Case Loai
           Case 0:
           Case 1: .Replacement.Font.Italic = True 'italic
           Case 2: Selection.Find.MatchCase = True ' Hoa
           Case 3: Selection.Find.MatchCase = True '-> thuong
                    Selection.Find.Replacement.Font.Italic = False
                    Selection.Find.Replacement.Font.Color = wdColorAutomatic
        End Select
        Select Case mau_me
           Case 4:  .Replacement.HIGHLIGHT = False
           Case 5:     .Replacement.HIGHLIGHT = True
           
        End Select
        .MatchWildcards = False
        .MatchWildcards = False
         
        .Text = MÂU_TÌM
        .Replacement.Text = MÂU_THAY
        '.Execute Replace:=wdReplaceAll
        .Execute Replace:=wdReplaceOne
 
                    While .Found
                       .Execute Replace:=wdReplaceOne
                    Wend
        ' phuc hôi cho lâ`n tiêp default
       .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = wdFindContinue
        .MatchCase = False
        '.Replacement.Font.Italic = False
       '.Replacement.Font.Bold = False
       '.Replacement.Font.Color = 0
       
    End With
End Sub
Private Sub Xoa_hai_khoangtrang()

    With Selection.Find
                           .ClearFormatting
                           .MatchCase = False
                                                       
                           .Text = "  "
                           .Replacement.Text = " "
                           .Replacement.HIGHLIGHT = True
                           .MatchWholeWord = True
                           .MatchWildcards = True
                           .MatchSoundsLike = False
                           .MatchAllWordForms = False
                           .Wrap = wdFindContinue
                     
                           
                            ' Loop until Word can no longer
                            ' find the search string and
                            ' count each instance
                                     
               
                       Do While .Execute
                                                       
                               .Execute Replace:=wdReplaceOne
                               ' Chuyen den tu tiep theo
                               Selection.MoveRight
                                                       
                        Loop
               
    End With
End Sub
Sub Thu_Nghiem()
    Dim t_t As String
    Dim s_s As String
    Dim vvv As String
    Dim yyy As String
 
    Dim mmm  As String
    Dim NNN  As String
    'Dim txt1_arr() As String
   
   
                     
     
             mmm = " | Papa your ,"
 
 
            NNN = " fdgsdfgsdfg "
 
     ' txt1_arr() = Split(Trim(mmm), " ")
     ' MsgBox "LÂY_GÍA_TRI_CUA_txt1: " & txt1_arr(0), vbInformation
   '  MsgBox "LÂY_GÍA_TRI_CUA_txt1: " & txt1_arr(1), vbInformation
                     ' If InStr(mmm, "*") Then
                       '  vvv = Replace(mmm, "*", "\*")
                       '  Else
                        ' vvv = mmm
                       ' End If
                     '
     
 
            ' Cai nay giu lai ma thu nghiem
            t_t = LÂY_MÂU_TÌM(mmm, NNN)
            s_s = LÂY_MÂU_THAY(mmm, NNN)
            MsgBox "LÂY_GÍA_TRI_CUA_txt1: " & t_t, vbInformation
            MsgBox "LÂY_GÍA_TRI_CUA_txt2: " & s_s, vbInformation
           'MsgBox "VD: " & Chr(13) & "([ ]{1,2})" & t_t & Chr(13)
End Sub

anhcau
Bài viết: 8
Ngày tham gia: T.Bảy 06/07/2013 1:18 pm

Ứng dụng dịch Tiếng Anh và một số ngoại ngữ trong MS Word

Gửi bàigửi bởi anhcau » T.Năm 22/01/2015 12:08 pm

2-CÁCH HOẠT ĐỘNG CỦA PHẦN MÃ NÀY

Cơ sở:

a- Trong đoạn văn A nói trên, các bạn thấy mấy từ đứng trong câu tôi tạm trích như sau:

    "My children, that it is not for your physical well-being I come.
    I will speak most profoundly in a Christmas message to all My children. Tonight, I am blessing you with My Blessing of Holy Love.
    ... in this regard. My children, I love you, I pray for ...

Tôi muốn thay đơn giản là chữ My children, ở đây là khá dễ, nếu thay đằng sau và trước từ đó không có khoảng trắng đi kèm, nghĩa là thế nào. Xin xét ví dụ sau đây:

Bản văn B:

Such a soul could easily lose his way because he does not look within himself but looks outside himself seeking perfection, seeking more exterior grace.

... Let Holy Love chart the course of all souls for it is in this way harmony is restored in the universe.

Bản văn C:

Some of these hearts have been laid waste by compromise and error, and misrepresent the faith.
For it is in this way the world will undergo a genesis and be renewed in the Faith.
.. now for all the faithful departed.


Bạn để ý rằng, nếu thay cụm từ My children trong Bản văn A không cần dùng hai khoảng trắng trước và sau từ này vẫn đúng thì trong các trường hợp khác lại không áp dụng được. Thí dụ trong ví dụ bản văn B, nếu thay từ his way = lối của anh ta thì nó sẽ như sau:

Bản văn B:

Such a soul could easily lose lối của anh ta because he does not look within himself but looks outside himself seeking perfection, seeking more exterior grace.

... Let Holy Love chart the course of all souls for it is in tlối của anh ta harmony is restored in the universe.

còn với bản văn C thì khi thay the faith = những người thành tín thì nó trở thành như sau

Bản văn C:

Some of these hearts have been laid waste by compromise and error, and misrepresent những người thành tín.
For it is in this way the world will undergo a genesis and be renewed in the Faith.
.. now for all những người thành tínful departed.


Như thế, các từ ở trên có vấn đề là các từ này:

    tlối của anh ta
    những người thành tínful

Trong nhiều trường hợp ta không còn biết được từ nguyên gốc tiếng Anh ban đầu như thế nào nữa, thì lại rất tệ hại!

Vì thay thế hàng loạt nên chắc chắn rằng phải thay thế dạng có dấu khoảng trắng trước và sau từ cần thay, có nghĩa là, các từ thay sẽ có dạng:

    _My children_ = các con của Tôi
    _his way_ = lối của anh ta
    _the faith_ = những người thành tín

Trong đó, để dế nhìn tôi mô phỏng các khoảng trắng " " bằng ký tự _
Để ý rằng việc Replace trong MS Word 2003 không thay thế được các từ (đã được chia thành quá khứ phân từ, hay dạng -ed ... ) nếu nó là 2 từ trở lên được thay thế cùng lúc.


Như thế lại phát sinh vấn đề là tại đoạn văn A, từ My children lại có các dấu đằng trước và đằng sau đi kèm như dưới đây:

    "My children, that it is not for your physical well-being I come.
    I will speak most profoundly in a Christmas message to all My children. Tonight, I am blessing you with My Blessing of Holy Love.
    ... in this regard. My children, I love you, I pray for ...

Trong khi dạng thay thế được phải là:

    " My children , that it is not for your physical well-being I come.
    I will speak most profoundly in a Christmas message to all My children . Tonight, I am blessing you with My Blessing of Holy Love.
    ... in this regard. My children , I love you, I pray for ...

(Để ý rằng các dấu đã không còn dính liền với các ký tự cuối cùng và phía đầu tiên của từ nữa)

*Chú ý:
Vẫn thay thế được với các dấu liền kề các chữ đính kèm trước và sau từ cần thay, tuy nhiên vì tổ hợp dấu khá nhiều, bao gồm các dấu:
    .
    ,
    ;
    :
    -
    !
    ?
    "

nên sẽ gây ra trường hợp là máy xử lý chậm chạp hơn so với khi có hai khoảng trắng hai phía, cái này tôi đã thử! Nên trường hợp tôi nói ở đây là không tính đến trường hợp này nữa.

Ngoài ra khi thay thế như thế thì do có hai khoảng trắng ở đầu nên từ đầu câu cũng phải lui vào ít nhất là một khoảng trắng, và các từ cuối của đoạn văn hay câu văn, nếu không có các dấu , . ; " : ! ? / { } [ ] ( ) cũng phải có thêm ít ra là một khoảng trắng nữa mới có thể thay được hết.

Các câu có Bullets hay Numbering ở đầu cũng tương tự.
Sửa lần cuối bởi anhcau vào ngày T.Năm 22/01/2015 12:19 pm với 1 lần sửa.

anhcau
Bài viết: 8
Ngày tham gia: T.Bảy 06/07/2013 1:18 pm

Ứng dụng dịch Tiếng Anh và một số ngoại ngữ trong MS Word

Gửi bàigửi bởi anhcau » T.Năm 22/01/2015 12:18 pm

b - Giải pháp tạo khoảng trắng trước và sau từ.

Dùng mã Macro (ký hiệu MA2) đơn giản sau đây:


Mã: Chọn hết

Public Sub Thaycáidâunhé(MÂU_TÌM As String, MÂU_THAY As String, _
                                             Optional ByVal Loai As Integer = 0, Optional ByVal mau_me As Integer = 4)
    On Error Resume Next
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        Select Case Loai
           Case 0:
           Case 1: .Replacement.Font.Italic = True 'italic
           Case 2: Selection.Find.MatchCase = True ' Hoa
           Case 3: Selection.Find.MatchCase = True '-> thuong
                    Selection.Find.Replacement.Font.Italic = False
                    Selection.Find.Replacement.Font.Color = wdColorAutomatic
        End Select
        Select Case mau_me
           Case 4:  .Replacement.HIGHLIGHT = False
           Case 5:     .Replacement.HIGHLIGHT = True
           
        End Select
        .MatchWildcards = False
        .MatchWildcards = True
       
        .Text = MÂU_TÌM
        .Replacement.Text = MÂU_THAY
        .Execute Replace:=wdReplaceAll
         
                   
       
       
        ' phuc hôi cho lâ`n tiêp default
       .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = wdFindContinue
        .MatchCase = False
         
       
       
                     
    End With
End Sub
Private Sub Dichvaomotkytuodaucau()
Selection.HomeKey Unit:=wdStory, Extend:=wdMove ' vê` Ðâ`u document
Do Until Selection.Range.Bookmarks.Exists("\EndOfDoc") = True ' cho Ðê'n cuô'i document
  Selection.Move wdSentence, 1 ' move tu'`ng câu
   Selection.MoveRight wdCharacter, 1, wdExtend ' chon ký tu Ðâu câu
   Selection.Text = " " & (Selection.Text)
Loop ' Vòng lap
End Sub
Sub Thay_thê_dâu_Moinhe()
     
     
     Dim DÂU As String
       
      ' Ðánh dâu vi trí lúc Ðó
        ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="xxxx"

   
    ' Các hàng sô
     
      DÂU = "([\\\[\],.;:\?\!\""\“\{\}\)\(])"
       
       ' Xu ly dâu dung vao vi tri
         
       Thaycáidâunhé MÂU_TÌM:=DÂU, MÂU_THAY:="\1 ", mau_me:=4
       
       ' Dich vao 1 ky tu o dau cau
       ' Cho cac tu o dâu câu thut vao 1 khoang trang
       Call Dichvaomotkytuodaucau
             
      ' Them 1 khoang trang sau cau can xuong dong
       Thaycáidâunhé MÂU_TÌM:="([! ])(^13)", MÂU_THAY:="\1 \2", mau_me:=4
       
       ' Xoa cac khoang trang
       Thaycáidâunhé MÂU_TÌM:="([ ]{2,10})", MÂU_THAY:=" ", mau_me:=4
     
      ' Cho cac tu o dâu câu thut vao 1 khoang trang
      ' Thaycáidâunhé MÂU_TÌM:="((chr(13))" & "([! ])", MÂU_THAY:=" \1\2", mau_me:=5
       
   
       Thaycáidâunhé MÂU_TÌM:="([! ])" & DÂU & DÂU, MÂU_THAY:="\1 \2 \3", mau_me:=4
       
       Thaycáidâunhé MÂU_TÌM:="([! ])" & DÂU & Chr(32), MÂU_THAY:="\1 \2 ", mau_me:=4
       
       Thaycáidâunhé MÂU_TÌM:="([ ])" & DÂU & "([! ])", MÂU_THAY:="\1 \2 \3", mau_me:=4
       
       Thaycáidâunhé MÂU_TÌM:=DÂU, MÂU_THAY:="\1", mau_me:=5
       
       Thaycáidâunhé MÂU_TÌM:=DÂU & DÂU, MÂU_THAY:="\1 \2", mau_me:=5
      ' Xoa cac khoang trang
      ' lam lai them lan nua
     
       Thaycáidâunhé MÂU_TÌM:="([ ]{2,10})", MÂU_THAY:=" ", mau_me:=4
       
          Thaycáidâunhé MÂU_TÌM:="([ ]{2,10})", MÂU_THAY:=" ", mau_me:=4
         
    ' Thay cac chu a . m va p . m thanh a.m p.m
     
            Thaycáidâunhé MÂU_TÌM:="([ a])([ ])([,.;:])([ ])([m ])", MÂU_THAY:="\1\3\5", mau_me:=4
            Thaycáidâunhé MÂU_TÌM:="([ A])([ ])([,.;:])([ ])([m ])", MÂU_THAY:="\1\3\5", mau_me:=4
            Thaycáidâunhé MÂU_TÌM:="([ p])([ ])([,.;:])([ ])([m ])", MÂU_THAY:="\1\3\5", mau_me:=4
            Thaycáidâunhé MÂU_TÌM:="([ P])([ ])([,.;:])([ ])([m ])", MÂU_THAY:="\1\3\5", mau_me:=4
   
    ' phuc hoi cac dau : o giua các sô
           
      Thaycáidâunhé MÂU_TÌM:="([0-9]{1,2})([ ])([,.;:])([ ])([0-9]{1,2})", MÂU_THAY:="\1\3\5", mau_me:=4
           
         
           
        'Thaycáidâunhé MÂU_TÌM:="([ ]{1,2})(Fatima)" & Chr(13), MÂU_THAY:="\1 \2 phuong an 1" & Chr(13), mau_me:=5
       ' Thaycáidâunhé MÂU_TÌM:="(Fatima)" & Chr(13), MÂU_THAY:="\1 \2phuong an 2" & Chr(13), mau_me:=5
     ' Thaycáidâunhé MÂU_TÌM:="(Fatima )" & Chr(13), MÂU_THAY:="\1 \2phuong an 3" & Chr(13), mau_me:=5
    '  Thaycáidâunhé MÂU_TÌM:="( Fatima)([ ]{1,2})" & Chr(13), MÂU_THAY:=" \1 \2 phuong an 4" & Chr(13), mau_me:=5
     '  Thaycáidâunhé MÂU_TÌM:="(Fatima)([ ]{1,2})" & Chr(13), MÂU_THAY:="\1 \2 phuong an 5" & Chr(13), mau_me:=5
     ' Thaycáidâunhé MÂU_TÌM:="([ ]{1,2})(Fatima)([ ]{1,2})" & Chr(13), MÂU_THAY:="\1 \2 \3phuong an 6" & Chr(13), mau_me:=5
      '   Thaycáidâunhé MÂU_TÌM:="(lic)([ ]{1,2})" & Chr(13), MÂU_THAY:="\1 yyyy" & Chr(13), mau_me:=5
     
       'Thaycáidâunhé MÂU_TÌM:=Chr(13) & "([ ]{1,2})(P)", MÂU_THAY:=Chr(13) & "\1 C", mau_me:=5
               
        ' Tro vê vi trí Ðánh dâu và xóa bookmark

                        'Application.ScreenUpdating = True

On Error Resume Next
                       
                        Selection.GoTo what:=wdGoToBookmark, Name:="xxxx"
                       
                        ActiveDocument.Bookmarks("xxxx").Delete

         
End Sub
 

moitinhdau
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Bảy 28/05/2011 11:59 am
Has thanked: 1 time
Been thanked: 1 time

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

Gửi bàigửi bởi moitinhdau » T.Tư 11/03/2015 6:06 pm

Nhờ các bác giúp vấn đề này với
viewtopic.php?f=15&t=30335

moitinhdau
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Bảy 28/05/2011 11:59 am
Has thanked: 1 time
Been thanked: 1 time

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

Gửi bàigửi bởi moitinhdau » T.Sáu 13/03/2015 9:54 pm

Không lẽ bó tay sao các bác.

naruto3590
Bài viết: 2
Ngày tham gia: T.Ba 17/03/2015 10:03 pm

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

Gửi bàigửi bởi naruto3590 » T.Ba 17/03/2015 10:11 pm

Chào mọi người! :x
Sửa lần cuối bởi naruto3590 vào ngày T.Ba 03/05/2016 7:47 am với 1 lần sửa.

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ề Word VBA Mời vào đây!

Gửi bàigửi bởi truongphu » T.Hai 30/03/2015 9:09 am

naruto3590 đã viết:e chạy nhưng nó chỉ chạy được phần số đầu tiên từ kí tự thứ 2 trở đi không chạy ra đc,

Sub newmacro()
Dim ZZZ As Long
Selection.GoTo , , 1
For ZZZ = 1 To 999
With Selection.Find
.Text = "n" & ZZZ & ""
.Replacement.Text = "@@@_(n" & ZZZ & ").___(n" & ZZZ & ")"
.Execute Replace:=wdReplaceAll
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Next
End Sub


Với lệnh .Execute Replace:=wdReplaceAll thì word sẽ tìm thay hết, do đó bạn viết:

Mã: Chọn hết

For ZZZ = 1 To 999
'. . .
Next

sẽ làm nặng máy vì vòng lặp sẽ chạy 1000 lần!

Để tìm và thay tiếp, bạn cần thêm lệnh:

Mã: Chọn hết

.Wrap = wdFindContinue


Mã: Chọn hết

Sub newmacro()
    With Selection.Find
        .Text = "n" & ZZZ & ""
        .Replacement.Text = "@@@_(n" & ZZZ & ").___(n" & ZZZ & ")"
        .Wrap = wdFindContinue
        .Execute Replace:=wdReplaceAll
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
End Sub
o0o--truongphu--o0o

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

mrgrey
Bài viết: 1
Ngày tham gia: T.Ba 12/05/2015 2:54 pm

Chuyển unicode dựng sẵn sang unicode tổ hợp VBA

Gửi bàigửi bởi mrgrey » T.Ba 12/05/2015 3:30 pm

Làm ơn giúp tôi chuyển unicode dựng sẵn sang unicode tổ hợp
Chi tiết là tôi thêm các text box trong excel gõ unicode dựng sẵn nó hiển thì bình thường nhưng khi in thì nó lỗi font, còn sử dụng unicode tổ hợp thì không sao.
Xin chân thành cảm ơn

pretty_girl2703
Bài viết: 1
Ngày tham gia: T.Hai 29/06/2015 2:26 pm

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

Gửi bàigửi bởi pretty_girl2703 » T.Hai 29/06/2015 2:52 pm

Xin chào mọi người ạ. Em là thành viên mới học về VBA xin được giúp đỡ.Hiện tại, em đang muốn viết code VBA excel với nội dung như sau:

Em muốn lấy dữ liệu từ file "Incoming Inspection Result Report" sao chép sang file "Report" theo như layout của file "Report". Em cũng đã viết thử nhưng không chạy được.
Trong file "Report" có cột "Kiểm tra kích thước" (A,B,C,D,E,F,G,H,I,J,K,L,M,N) thì được nhập số liệu như vùng bôi màu xanh da trời. Cứ mỗi lần QC nhập kích thước được đo theo chuẩn, và số lần đo tùy thuộc vào số lượng sản xuất từ nhà cung cấp (Ví dụ ở đây, sản xuất ra 200 con hàng,mức độ kiểm tra là giảm nhẹ (GN) thì chỉ cần kiểm tra đo kích thước 3 lần). Em mong muốn,có 1 nút bấm mà sau khi nhập hết 3 lần đo, dữ liệu sẽ tự động lưu dữ liệu từ file "Incoming Inspection Result Report" sang "Report", sau đó dữ liệu cũ sẽ được xóa và QC sẽ nhập mã hàng khác với số lượng khác,và sau khi xong thì sẽ tiếp tục lưu dữ liệu mới vừa nhập vào file "Report" ở những dòng tiếp theo.
Dưới đây là 2 file em đề cập đến ạ.
Rất mong các anh chị giúp đỡ em.Em ngồi mò viết cả mấy bữa nay mà không ra.

Em xin chân thành cám ơn ạ.
Tập tin đính kèm
Thac Mac VBA trong Excel.7z
2 file được đề cập ở trên
(46.59 KiB) Đã tải 132 lần

huyndh
Bài viết: 2
Ngày tham gia: T.Sáu 14/08/2015 10:21 am

Xin giúp đỡ code đọc số thành chữ, đọc điểm bài thi ấy các bác

Gửi bàigửi bởi huyndh » T.Sáu 14/08/2015 10:40 am

Tình hình là mình cop đc code đọc số thành chữ trong excel, nhưng nó dùng trong kế toán.
Mình chỉ cần đọc từng số VD 7,7 đọc la bảy phẩy 7
Mình không rành về VB nên rất mong sự giúp đỡ của các bạn
Nó đây @@


  1. Function DocSoVni(conso) As String
  2. s09 = Array("", " moät", " hai", " ba", " boán", " naêm", " saùu", " baûy", " taùm", " chín")
  3. lop3 = Array("", " trieäu", " nghìn", " tyû")
  4. If Trim(conso) = "" Then
  5. DocSoVni = ""
  6. ElseIf IsNumeric(conso) = True Then
  7. If conso < 0 Then dau = "aâm " Else dau = ""
  8. conso = Application.WorksheetFunction.Round(Abs(conso), 0)
  9. conso = " " & conso
  10. conso = Replace(conso, ",", "", 1)
  11. vt = InStr(1, conso, "E")
  12. If vt > 0 Then
  13. sonhan = Val(Mid(conso, vt + 1))
  14. conso = Trim(Mid(conso, 2, vt - 2))
  15. conso = conso & String(sonhan - Len(conso) + 1, "0")
  16. End If
  17. conso = Trim(conso)
  18. sochuso = Len(conso) Mod 9
  19. If sochuso > 0 Then conso = String(9 - (sochuso Mod 12), "0") & conso
  20. docso = ""
  21. i = 1
  22. lop = 1
  23. Do
  24. n1 = Mid(conso, i, 1)
  25. n2 = Mid(conso, i + 1, 1)
  26. n3 = Mid(conso, i + 2, 1)
  27. baso = Mid(conso, i, 3)
  28. i = i + 3
  29. If n1 & n2 & n3 = "000" Then
  30. If docso <> "" And lop = 3 And Len(conso) - i > 2 Then s123 = " tyû" Else s123 = ""
  31. Else
  32. If n1 = 0 Then
  33. If docso = "" Then s1 = "" Else s1 = " khoâng traêm"
  34. Else
  35. s1 = s09(n1) & " traêm"
  36. End If
  37. If n2 = 0 Then
  38. If s1 = "" Or n3 = 0 Then
  39. s2 = ""
  40. Else
  41. s2 = " linh"
  42. End If
  43. Else
  44. If n2 = 1 Then s2 = " möôøi" Else s2 = s09(n2) & " möôi"
  45. End If
  46. If n3 = 1 Then
  47. If n2 = 1 Or n2 = 0 Then s3 = " moät" Else s3 = " moát"
  48. ElseIf n3 = 5 And n2 <> 0 Then
  49. s3 = " laêm"
  50. Else
  51. s3 = s09(n3)
  52. End If
  53. If i > Len(conso) Then
  54. s123 = s1 & s2 & s3
  55. Else
  56. s123 = s1 & s2 & s3 & lop3(lop)
  57. End If
  58. End If
  59. lop = lop + 1
  60. If lop > 3 Then lop = 1
  61. docso = docso & s123
  62. If i > Len(conso) Then Exit Do
  63. Loop
  64. If docso = "" Then DocSoVni = "khoâng" Else DocSoVni = dau & Trim(docso)
  65. Else
  66. DocSoVni = conso
  67. End If
  68. End Function
  69. Function DocSoUni(conso) As String
  70. s09 = Array("", " m" & ChrW(7897) & "t", " hai", " ba", " b" & ChrW(7889) & "n", " n" & ChrW(259) & "m", " s" & ChrW(225) & "u", " b" & ChrW(7843) & "y", " t" & ChrW(225) & "m", " ch" & ChrW(237) & "n")
  71. lop3 = Array("", " tri" & ChrW(7879) & "u", " ngh" & ChrW(236) & "n", " t" & ChrW(7927))
  72. 'Stop
  73. If Trim(conso) = "" Then
  74. DocSoUni = ""
  75. ElseIf IsNumeric(conso) = True Then
  76. If conso < 0 Then dau = ChrW(226) & "m " Else dau = ""
  77. conso = Application.WorksheetFunction.Round(Abs(conso), 0)
  78. conso = " " & conso
  79. conso = Replace(conso, ",", "", 1)
  80. vt = InStr(1, conso, "E")
  81. If vt > 0 Then
  82. sonhan = Val(Mid(conso, vt + 1))
  83. conso = Trim(Mid(conso, 2, vt - 2))
  84. conso = conso & String(sonhan - Len(conso) + 1, "0")
  85. End If
  86. conso = Trim(conso)
  87. sochuso = Len(conso) Mod 9
  88. If sochuso > 0 Then conso = String(9 - (sochuso Mod 12), "0") & conso
  89. docso = ""
  90. i = 1
  91. lop = 1
  92. Do
  93. n1 = Mid(conso, i, 1)
  94. n2 = Mid(conso, i + 1, 1)
  95. n3 = Mid(conso, i + 2, 1)
  96. baso = Mid(conso, i, 3)
  97. i = i + 3
  98. If n1 & n2 & n3 = "000" Then
  99. If docso <> "" And lop = 3 And Len(conso) - i > 2 Then s123 = " t" & ChrW(7927) Else s123 = ""
  100. Else
  101. If n1 = 0 Then
  102. If docso = "" Then s1 = "" Else s1 = " kh" & ChrW(244) & "ng tr" & ChrW(259) & "m"
  103. Else
  104. s1 = s09(n1) & " tr" & ChrW(259) & "m"
  105. End If
  106. If n2 = 0 Then
  107. If s1 = "" Or n3 = 0 Then
  108. s2 = ""
  109. Else
  110. s2 = " linh"
  111. End If
  112. Else
  113. If n2 = 1 Then s2 = " m" & ChrW(432) & ChrW(7901) & "i" Else s2 = s09(n2) & " m" & ChrW(432) & ChrW(417) & "i"
  114. End If
  115. If n3 = 1 Then
  116. If n2 = 1 Or n2 = 0 Then s3 = " m" & ChrW(7897) & "t" Else s3 = " m" & ChrW(7889) & "t"
  117. ElseIf n3 = 5 And n2 <> 0 Then
  118. s3 = " l" & ChrW(259) & "m"
  119. Else
  120. s3 = s09(n3)
  121. End If
  122. If i > Len(conso) Then
  123. s123 = s1 & s2 & s3
  124. Else
  125. s123 = s1 & s2 & s3 & lop3(lop)
  126. End If
  127. End If
  128. lop = lop + 1
  129. If lop > 3 Then lop = 1
  130. docso = docso & s123
  131. If i > Len(conso) Then Exit Do
  132. Loop
  133. If docso = "" Then DocSoUni = "kh" & ChrW(244) & "ng" Else DocSoUni = dau & Trim(docso)
  134. Else
  135. DocSoUni = conso
  136. End If
  137. End Function
  138.  

naruto3590
Bài viết: 2
Ngày tham gia: T.Ba 17/03/2015 10:03 pm

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

Gửi bàigửi bởi naruto3590 » T.Tư 16/09/2015 8:31 pm

nhờ bro truongphu giúp đỡ với
chả là thế này em muốn replace chữ dạng ABCDE nhưng ko fai là smallcaps!
kiểu chữ đầu font 13 các chữ sau font 7 hoăc 8 chả hạn.
replace thành dạng <h>ABCDE</h>
có cách nào tìm và replace các chữ dạng này ko.
mong bro giúp đỡ

tnhatanh68
Bài viết: 1
Ngày tham gia: CN 17/01/2016 10:48 am

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

Gửi bàigửi bởi tnhatanh68 » CN 17/01/2016 10:54 am

Chào mọi người,

Mình có vấn đề xin mọi người giúp đỡ như sau. Mình có 1 đoạn code với mục đích save file word theo tên mong muốn từ 1 dòng trong file word bất kì

ví dụ file word có nội dung như sau



FLIGHT RELEASE
FLT NO. FROM / TO DATE AIRCRAFT
PIC799 HAN SGN 17JAN16 VNA555

DISPATCHER ANH - DESK EXTENSION +84 8 35474520
COMMENTS
EFB VERSION: 160114V1
A a a a a a a a a a
SIGNED_______________________
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

CAPTAIN THOMPSON
FIRST OFFICER HUNG
JUMP SEAT

FILED ATC PLAN
----------------
(FPL-PIC799-IS
-A320/M-SDFGHIRWY/LB1
-VVNB1455
-N0457F360 VITRA2A VITRA DCT NAH W1 HAMIN W10 PLK W1 AC ANLOC1B
-VVTS0141 VVPQ VVDN
-PBN/A1D1O1 DOF/160117 REG/VNA555
EET/VVTS0037
SEL/EKDM CODE/8880A7 OPR/JETSTAR PACIFIC PER/C RMK/TCAS EQUIPPED
E/0255 P/TBN R/VE J/L D/0 A/GRAY C/THOMPSON)

Và mình muốn copy nội dung dòng được tô đậm để làm tên lưu cho file (PIC799 HAN SGN 17JAN16 VNA555)

Nhưng không biết sao khi làm tay để record vào thì bình thường, nhưng khi bâm run macro để chạy thì nó báo lỗi 5487 file permission error.

Code như sau

Mã: Chọn hết

Sub test()
'
' test Macro
'
'
   Dim k As String, t As String


    Selection.MoveUp Unit:=wdLine, Count:=500
    Selection.MoveDown Unit:=wdLine, Count:=4
    Selection.HomeKey Unit:=wdLine
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    Selection.Copy
    k = Selection.Text
   
    t = "D:\OCC\" & k & ".docx"
   
   

    ChangeFileOpenDirectory "D:\OCC\"
    ActiveDocument.SaveAs2 FileName:=t, FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False, CompatibilityMode:=14
   
End Sub


Xin nhờ mọi người giúp đỡ [-O<

vinnycf
Bài viết: 1
Ngày tham gia: T.Năm 18/08/2016 2:31 pm

TỰ ĐỘNG NHẢY CHỮ KHI ĐÁNH VÀO Ô ĐẦU TIÊN

Gửi bàigửi bởi vinnycf » T.Năm 18/08/2016 2:37 pm

Hi cả nhà, em có vấn đề này nhờ cả nhà giúp với.
Hiện tại em đang soạn thảo 1 văn bản và sẽ có vài trường thông tin trùng lặp, em muốn khi đánh 1 trường lúc đầu thì các trường phía tự động nhảy lại đúng nội dung như em đã đánh.
Bên excel thì mình có dùng "=" chọn ô, còn bên word thì em không biết có cách nào không.

Tên: A
Nghê nghiệp: xxxx
Tên:

Em đánh tên: A thì các trường sau khi có trùng tiêu đề "Tên" cũng nhay thành A ạ

NTK.vb6
Bài viết: 9
Ngày tham gia: T.Bảy 17/09/2016 10:04 am
Been thanked: 1 time

SaveAs file MSWord không được như ý muốn.

Gửi bàigửi bởi NTK.vb6 » T.Bảy 17/09/2016 11:22 am

Khi mình SaveAs file trong vòng lặp For thì đều trả về kết quả là "A1". trong khi đáng lẽ phải là "A1","A2","A3","A4".
dưới đây là code của mình. mong mọi người giúp đỡ!
  1.     Dim WordApp As New Word.Application
  2.     Dim DocApp As Word.Document
  3.     Dim SelectApp As Object
  4.     Set DocApp = WordApp.Documents.Open("D:\Lap trinh VB\On tap\data\mauvd1.doc")
  5.     Set SelectApp = WordApp.Selection
  6.     For i = 1 To 4
  7.         SelectApp.Find.ClearFormatting
  8.         SelectApp.Find.Replacement.ClearFormatting
  9.         With SelectApp.Find
  10.             .Text = "1DiaChiThuaDat"
  11.             .Replacement.Text = "A" & i
  12.             .Forward = True
  13.             .Wrap = wdFindContinue
  14.             .Format = False
  15.             .MatchCase = False
  16.             .MatchWholeWord = False
  17.             .MatchWildcards = False
  18.             .MatchSoundsLike = False
  19.             .MatchAllWordForms = False
  20.         End With
  21.         SelectApp.Find.Execute Replace:=wdReplaceAll
  22.         DocApp.SaveAs2 "D:\Lap trinh VB\On tap\ket qua\" & "kq_" & i & ".doc"
  23.     Next
  24.     DocApp.Close
  25.     MsgBox "xong"
  26.  

Tracdac
Bài viết: 1
Ngày tham gia: T.Sáu 07/10/2016 8:27 am
Liên hệ:

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

Gửi bàigửi bởi Tracdac » T.Sáu 07/10/2016 8:31 am

Em muốn lập trình lisp chạy trên Autocad nhưng trình độ gà mờ quá
WWW.DODACBANDO.COM

thuonghieuso
Bài viết: 4
Ngày tham gia: T.Bảy 12/11/2016 3:19 pm

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

Gửi bàigửi bởi thuonghieuso » T.Năm 17/11/2016 5:03 pm

Chào các bạn!
Cho mình hỏi một vấn đề thế này.
Mình có các câu hỏi như sau:
Câu 1: Nội dung
Câu 2: Nôi dung câu hỏi
Câu 3: Nội dung
Câu 4: Nôi dung câu hỏi
Câu 5: Nội dung
Câu 6: Nôi dung câu hỏi

Bây giờ mình muốn sử dụng Macro để thay đổi các chữ "Câu 1, Câu 2, Câu 3 ..." thành một chữ khác. Ví dụ đổi thành "@ Nội dung" thì phải làm như thế nào?
Nhờ các bạn giúp đỡ.

Hình đại diện của người dùng
trungtamcnc
Bài viết: 1
Ngày tham gia: T.Ba 15/07/2014 4:39 pm

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

Gửi bàigửi bởi trungtamcnc » T.Hai 05/12/2016 11:50 pm

Gửi bạn: thuonghieuso
Bạn làm như sau: Ấn Ctrl + H (tìm kiếm và thay thế)
Ô tìm kiếm: Nhập Câu ^?:
Ô thay thế: @Nội dung

Oke là xong.

thuonghieuso
Bài viết: 4
Ngày tham gia: T.Bảy 12/11/2016 3:19 pm

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

Gửi bàigửi bởi thuonghieuso » T.Sáu 23/12/2016 8:50 pm

Gửi bạn: thuonghieuso
Bạn làm như sau: Ấn Ctrl + H (tìm kiếm và thay thế)
Ô tìm kiếm: Nhập Câu ^?:
Ô thay thế: @Nội dung

Oke là xong.


Nhưng làm như vậy thì nó chỉ replace được tới số <10. Từ 10 trở lên là nó không được.
Thanks bạn nhé !

anhducnavy688
Bài viết: 1
Ngày tham gia: T.Ba 27/12/2016 11:07 am

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

Gửi bàigửi bởi anhducnavy688 » T.Tư 28/12/2016 3:20 pm

Chào các ae
Hiện tại em mới về làm giảng viên, muốn làm một đề tài nho nhỏ, em cũng mới nghiên cứu về VBA, và đã đọc rất nhiều bài của a trên các diễn đàn, tuy nhiên do thời gian có hạn, và nhiều nội dung em không thể tìm hiểu hết. Em muốn a trợ giúp e một vẫn đề nho nhỏ, em tìm bấy lâu nay chưa thấy.
Ý tưởng là em làm 1 cái tự đồng trộn đề thi, theo cấu trúc sắp xếp sẵn, tuy nhiên có 1 nội dung vướng.
Trong file Ngân hàng câu hỏi, giả sử em như sau:
[CH]
Câu 1: Hãy trình bày các giai đoạn lượn vòng?
[CH]
Câu 2: Đ/c trực canh phát hiện có người rơi xuống nước mạn trái,
Trên cương vị được giao, đ/c phải làm gì?
[CH]
Câu 3
.......
Giả sử em muốn chọn nội dung câu 2 thì ntn ạ, và làm sao để lấy nội dung câu đó, chèn vào sau 1 đoạn tiêu đề đề thi đặt ra sẵn


Ví dụ tiêu đề đề thi: ĐỀ THI HỌC KỲ II
Môn: Điều động tàu và QTTV
Ae trợ giúp em lấy nội dung câu 2, chèn vào sau đoạn tiêu đề đó được k ạ, em cám ơn a nhiều. Mong nhận được hồi âm sớm nhất của a ạ


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.1 khách