Hỗ trợ khắc phục lỗi Copy cùng 1 bảng tính sang nhiều vị trí trên Word bị lỗi Clipboard (2 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

Toanke063

Thành viên mới
Tham gia
10/6/24
Bài viết
16
Được thích
2
Chào các bạn, mình có một đoạn code copy và dán dữ liệu 1 vùng Excel sang Word (A1 : D5), tuy nhiên nó chỉ copy và dán đúng với 9 lần, còn lần thứ 10 trở đi nó sẽ vẫn copy nhưng bị Copy sai dữ liệu, mình có tìm hiểu trên mạng thì đây là giới hạn của Clipboard trong window, xin hỏi có cách nào khắc phục không, hoặc có cách nào để vẫn copy được Vùng Excel sang word vẫn giữ định dạng mà không bị giới hạn Clipboard 10 lần copy
(Khi chạy mình đã để số thứ tự của bảng mầu đỏ để các bạn dễ nhận thấy)
Mã:
Sub Copysangword()
Application.ScreenUpdating = True

Path = ActiveWorkbook.Path

 Dim wordApp As Object

   
    Set wordApp = CreateObject("Word.Application")
    With wordApp
        .Visible = True
        .Documents.Open (Path & "\MauWord.docx")
 
 For m = 1 To 20
 
 Range("B1").Value = m
 
 Range("A1:D5").Select
 
 Range("A1:D5").Copy

  .Selection.HomeKey Unit:=6
 
 
.Selection.Find.Text = "Bang " & m
       Do While .Selection.Find.Execute
    .Selection.Find.Replacement.Text = ""

        If .Selection.Range.Text = "Bang " & m Then
        .Selection.PasteAndFormat Type:=wdFormatOriginalFormatting
        End If
   Loop
   .Selection.HomeKey Unit:=6
   .Selection.Find.Execute "Bang " & m, , , , , , , , , "", 2
 
 
   Next m

           .ActiveDocument.SaveAs Filename:=Path & "\KetQua.docx"
 End With
End Sub
1732252092191.png

1732252204019.png
 

File đính kèm

Lần chỉnh sửa cuối:
Mình thấy Nếu mỗi lần copy mà thay đổi vùng dữ liệu cần sao chép, thì hoàn toàn dán bình thường, không lỗi gì cả
 
Upvote 0
Chào các bạn, mình có một đoạn code copy và dán dữ liệu 1 vùng Excel sang Word (A1 : D5), tuy nhiên nó chỉ copy và dán đúng với 9 lần, còn lần thứ 10 trở đi nó sẽ vẫn copy nhưng bị Copy sai dữ liệu, mình có tìm hiểu trên mạng thì đây là giới hạn của Clipboard trong window, xin hỏi có cách nào khắc phục không, hoặc có cách nào để vẫn copy được Vùng Excel sang word vẫn giữ định dạng mà không bị giới hạn Clipboard 10 lần copy
(Khi chạy mình đã để số thứ tự của bảng mầu đỏ để các bạn dễ nhận thấy)


View attachment 305800
Nếu chỉ cần copy và paste liên tục m lần (m tùy ý: 100, 1000, 999999..) các bảng copy ấy được paste liên tục kế tiếp nhau mà không cần quan tâm phải paste vào chỗ chỉ định trước thì bạn có thể tham khảo đoạn code sau:
Mã:
Sub Copysangword()
Application.ScreenUpdating = True

Path = ActiveWorkbook.Path
 Dim wordApp As Object

    Set wordApp = CreateObject("Word.Application")
    With wordApp
        .Visible = True
        .Documents.Open (Path & "\MauWord.docx")
 For m = 1 To 20
    Range("B1").Value = m
    Range("A1:D5").Select
    Range("A1:D5").Copy
    .Selection.PasteAndFormat Type:=wdFormatOriginalFormatting
   Next m
        .ActiveDocument.SaveAs Filename:=Path & "\KetQua.docx"
 End With
End Sub
 

File đính kèm

  • Screenshot (252).png
    Screenshot (252).png
    97.9 KB · Đọc: 2
  • CopyToWord.xlsm
    CopyToWord.xlsm
    20.8 KB · Đọc: 5
Upvote 0
Của mình cần dán vào chỗ chỉ định trước, cụ thể là dán bảng dự toán vào các vị trí khác nhau trên file mẫu word, thường trong mẫu word chỉ có 5 vị trí cần dán cùng 1 bảng, nhưng dự án mới của mình có tận 20 vị trí cần dán trong file word, nên giờ mới phát hiện ra vấn đề, cảm ơn bạn đã hỗ trợ, mình cũng thử xoá clipboad rồi nhưng vẫn lỗi (application.cutcopymode = false)
 
Upvote 0
Của mình cần dán vào chỗ chỉ định trước, cụ thể là dán bảng dự toán vào các vị trí khác nhau trên file mẫu word, thường trong mẫu word chỉ có 5 vị trí cần dán cùng 1 bảng, nhưng dự án mới của mình có tận 20 vị trí cần dán trong file word, nên giờ mới phát hiện ra vấn đề, cảm ơn bạn đã hỗ trợ, mình cũng thử xoá clipboad rồi nhưng vẫn lỗi (application.cutcopymode = false)
Theo tôi hiểu thì Code của bạn là dò tìm với điều kiện tìm là "Bang " & m
.Selection.Find.Text = "Bang " & m
Vậy thì Bang1Bang10 là giống nhau trong khi tìm kiếm
Và dòng này .Selection.Find.Execute "Bang " & m, , , , , , , , , "", 2
sau khi tìm thấy sẽ được thay thành Bang10 thay thành 0, ....
Nên tất nhiên là dòng .Selection.Find.Text = "Bang " & m ở vòng lặp khi m>=10 sẽ không tìm thấy.
Theo tôi bạn có thể liệt kê các từ cần tìm vào 1 cột, khi chạy vòng lặp for m= 1 to xxx thì cũng lấy luôn giá trị tìm kiếm để code sẽ tìm đến vị trí tìm được và paste.
Bạn có thể tham khảo các bài viết của anh Maika hoặc anh Ongke về trộn dữ liệu từ Excel sang Word . (có ngay trên diễn đàn này), trong đó vùng dũ liệu cần trộn nhiều và vùng cần paste ở file word cũng rất nhiều mà chạy vẫn mượt mà.
 
Upvote 0
Cảm ơn bạn, mình sẽ test thử giải pháp trên, mình không để ý đến tình huống bị lồng dữ liệu như bạn thấy
 
Lần chỉnh sửa cuối:
Upvote 0
Theo tôi hiểu thì Code của bạn là dò tìm với điều kiện tìm là "Bang " & m
.Selection.Find.Text = "Bang " & m
Vậy thì Bang1Bang10 là giống nhau trong khi tìm kiếm
Chắc là đúng vậy. Phương thức Find có tham số MatchWholeWord, cho nó = True sẽ tìm được 10, 11, ...
 
Upvote 0
Cảm ơn các bạn, lỗi đã được tìm ra là do bị lồng từ khoá mà không phai do Clipboard , mình đổi từ khoá hoặc step-1 là chạy được
 
Upvote 0
Web KT

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

Back
Top Bottom