• [Hỏi] Duyệt và thay thế chữ trong Word
  • [Hỏi] Duyệt và thay thế chữ trong Word

    maidinhdan > 08-05-20, 05:32 PM

    Kính thưa Anh/Chị diễn đàn Access.

    Tôi có viết 1 Add In cho Ms Word - các hàm liên quan đến chuyển Font chữ, chạy ok tất cả, công việc chuyển đổi trên Excel cũng ok.

    Riêng ở Word, nếu vừa có chữ và có table (bảng) khi quyét chọn cả 2 và thực hiện nút chuyển font thì ở chỗ cái bảng nó sẽ gom lại ô đầu tiên.
     
    Thuật toán của tôi là: quyét lấy từ đoạn paragraph sau đó dùng hàm thay ngay tại paragraph đó. Tuy nhiên đến table hàm này không hiệu quả là nó vẫn quyét được hết các ô trong table nhưng không thể thay thế đúng ngay ô tôi cần thay mà gom tất cả thay ở ô đầu tiên của table, nếu tôi thay code chuyển được cho table lại không thể thay được chỗ vùng chữ ngoài table. (Trên Excel thì chạy ngon lành vì chỉ có các địa chỉ ô thay rất gọn)

    Vì vậy, có cao thủ nào từng viết Add in hoặc hàm liên quan đến word rất mong được chia sẽ đoạn code duyệt và thay thế chữ như trên.

    Xin cảm ơn.
  • RE: [Hỏi] Duyệt và thay thế chữ trong Word

    thuyyeu99 > 08-05-20, 06:28 PM

    myObjectTable.Cell(2, 2).Range.Text

    If ActiveDocument.Tables.Count > 0 Then
        ActiveDocument.Tables(1).Select
        Set myObjectTable = ActiveDocument.Tables(1)
        For Each myObjectRow In myObjectTable.Rows
            For Each myObjectCell In myObjectRow.Cells
                  Debug.Print myObjectCell.Range.Text
            Next myObjectCell
        Next myObjectRow
    End If
  • RE: [Hỏi] Duyệt và thay thế chữ trong Word

    maidinhdan > 08-05-20, 08:47 PM

    (08-05-20, 06:28 PM)thuyyeu99 Đã viết: myObjectTable.Cell(2, 2).Range.Text

    If ActiveDocument.Tables.Count > 0 Then
        ActiveDocument.Tables(1).Select
        Set myObjectTable = ActiveDocument.Tables(1)
        For Each myObjectRow In myObjectTable.Rows
            For Each myObjectCell In myObjectRow.Cells
                  Debug.Print myObjectCell.Range.Text
            Next myObjectCell
        Next myObjectRow
    End If

    Trước tiên cảm ơn sự chia sẽ tận tâm và nhanh chóng của thủy; nhưng nhìn vào nó không thể sử dụng đối với mình. Xin giải thích lại lý do: ở trên cũng có nói sơ rồi.

    Code của Thủy là duyệt qua tất cả table và từng cell (ô) của tất cả table. trong code của mình củng đã triển khai tất cả, gồm như sau:
    - Đối với code duyệt, gồm: Code duyệt từng ký tự (character); duyệt từ từ (word); duyệt từng đoạn (kết thúc bởi dấu chấm hay phẩu ); duyệt từng dòng ( dòng kết thúc bởi Enter); đối với chữ trong table có thêm duyệt từng Cell, duyệt theo cột, duyệt theo dòng, duyệt từng table....
    - Đối với code Thay thế, gồm:
    + dùng hàm Find và Replace như trong Word; hàm này sẽ không khả dụng khi người dùng chỉ chuyển vùng chọn (nên nó bị bỏ)
    + hàm quyét qua như trên rồi thay ngay khi quét: đang dùng cái này nhưng vướng ổ chỗ.....khi quét hết các vùng ngoài table và đã thay thế hết,
    -->rồi đến vùng giả sử table(1); nó vẫn duyệt qua từng ô lấy đúng text và vị trí, nhưng khi dán trả ngược đúng tọa độ ô đó nó lại không thay mà thay vào ô đầu tiên của table (1);
    --> ví dụ 2: cũng trên table(1): người dùng chỉ bôi chọn dòng 2 (vùng cần chuyển đổi) thì khi quyét qua thì nó cũng quyét chính xác nhưng cũng gom toàn bộ text nhét vào ô thứ 1 của vùng chọn.
    --> ví dụ 3: người dùng bôi chọn vùng trong table + vùng ngoài table?

    ==> còn nếu mình chỉnh được code chuyển được trong table, thì lại gặp tình trạng bên ngoài table không chuyển đúng vị trí được(nó chạy vào trong table ).

    Vì thế, cần ý kiến và mô hình chuyển đổi trên word, còn code thì mình có thể tự viết.

    * Làm sao xác định vùng nào là ngoài table, vùng nào là trong table?
    * Phương pháp thay thế từ, ngoài 2 cái trên?
    * Bản thân mình cũng có code rồi, nhưng nó chưa đến hàm trăm hàm, mấy chục cái modules, còn object ...ôi thôi khỏi bàn, không hiểu hết... nên cần tư vấn của các bạn về mô hình chuyển đổi chữ.

    Cảm ơn Thủy nhé! hy vọng có cao thủ chỉ giúp