Hỗ trợ sửa Code khi Copy từ Excel sang Word

Liên hệ QC

hoahuongduong1986

Thành viên thường trực
Tham gia
14/11/18
Bài viết
346
Được thích
40
Kính gửi các Anh Chị và Các bạn của Diễn Đàn,
Em có một Code lấy trên mạng phục vụ cho công việc liên quan đến Copy báo cáo từ EXCEL vào WORD. Tuy nhiên, như ví dụ em đưa ra khi có bảng biểu Copy vào WORD thì khi căn chỉnh bảng này/hoặc các văn bản viết trên Excel thì nó tự động căn bảng trên dưới theo nó. Điều này sẽ không phù hợp nếu Data các bảng có độ dài ký từ quá khác biệt làm cho bảng tính xô lệch. Có thể sửa Code thế nào để các bảng tính/văn bản viết trên Excel là riêng biệt ạ. Để khi chỉnh một bảng thì không ảnh hưởng bảng khác trong WORD xuất ra ạ. Hoặc có cách gì past vào WORD thì các bảng tính sẽ past theo dạng ảnh. Em mày mò mãi không ra được ạ.

Em xin cảm ơn mọi người ạ !
 

File đính kèm

Lần chỉnh sửa cuối:
Câu này của em hỏi chắc khó đúng không ạ. Có anh chị nào có code Copy từ Excel vào W ưu việt hơn thì cho em với ạ. E cảm ơn
 
Upvote 0
Câu này của em hỏi chắc khó đúng không ạ. Có anh chị nào có code Copy từ Excel vào W ưu việt hơn thì cho em với ạ. E cảm ơn
câu hỏi khó hiểu và không có ví dụ minh họa nên k biết làm thế nào.(chữ nghĩa không thể biểu lộ hết ý vậy nên file out mẫu lỗi và k lỗi xem 1 cái hiểu luôn)
 
Upvote 0
Dear Anh,
Em có đưa theo File Excel đó anh ạ. Mở File thì nội dung trên File Excel nó sẽ xuất ra một File Word đó ạ. Cái em hỏi chỉ đơn giản là các nội dung của File WORd nó có cùng một định dạng ấy ạ, ví dụ khi em điều chỉnh cho bảng nào đó hoặc dòng nội dung nào đó thì định dạng căn lề nó sẽ bị thay đổi theo. Nghĩa là thay đổi một định dạng của một dòng/bảng thì các nội dung khác cũng thay đổi theo ạ. Giờ làm sao để mỗi một nội dung/hoặc bảng có định dạng riêng cho nó. Em cảm ơn ạ.
 
Upvote 0
Dear Anh,
Em có đưa theo File Excel đó anh ạ. Mở File thì nội dung trên File Excel nó sẽ xuất ra một File Word đó ạ.
Nếu chỉ muốn viết code cho tập tin cụ thể này thì viết rõ ra. Vì nếu người ta viết xong rồi bạn lại nói là đấy chỉ là ví dụ thì sai? Là tùy từng thời điểm mà sẽ có nhiều bảng hơn. Hoặc là bảng hiện giờ có tới cột E và D nhưng tùy thời điểm mà số cột sẽ thay đổi tới K và F. Viết cho trường hợp bất kỳ bao giờ cũng dài và phức tạp hơn. Nói cụt lủn thế ai biết cần lựa chọn thế nào?

Mà cho dù số bảng có thể thay đổi chứ không chỉ là 2 thì vị trí các bảng cũng thay đổi. Vd. bảng 1 hiện là A2:E18 nhưng do
* Ghi chú: Một khách hàng có thể có nhiều dòng
nên tuỳ thời điểm mà có thể sẽ là vị trí A2:E50. Nếu trước bảng 1 hay mỗi bảng khác số dòng có chữ cũng thay đổi thì cũng sẽ không còn là A2:E50 mà là vd. A15:E63. Thế thì vị trí các bảng bạn định cung cấp bằng cách nào? Mắt bạn nhìn và đoán là A2:E50 nhưng code làm gì có nhìn bằng mắt. Dấu hiệu để code phát hiện vị trí của mỗi bảng (từ dòng tới dòng, từ cột tới cột) bạn cung cấp cho code bằng cách nào?

Hiện các text trước mỗi bảng chỉ có trong cột A (A1, A20, A22), trong trường hợp tổng quát có thế không hay ngày mai lại có thêm text ở vd. E1, D20? Những chi tiết cụ thể nhiều khi cho phép rút gọn code.

Thêm nữa nếu ngoài các bảng ra thì các dòng Text là không đổi theo năm tháng, thời cuộc, thời tiết thì nên làm tập tin Word mẫu mà trong đó chỉ có các text ngoài bảng và đánh dấu những chỗ chèn bảng. Lúc đó code chỉ việc mở tập tin Word rồi chèn các bảng.

Tóm lại làm khó hay không chưa bàn tới. Không phải ai cũng viết bừa code trên cơ sở không có mô tả để rồi sau đó sửa đi sửa lại theo tiến trình cuộc chơi "thông tin nhỏ giọt". Bạn hỏi nên bạn không tiếc thời gian của người khác.
 
Upvote 0
Nếu chỉ muốn viết code cho tập tin cụ thể này thì viết rõ ra. Vì nếu người ta viết xong rồi bạn lại nói là đấy chỉ là ví dụ thì sai? Là tùy từng thời điểm mà sẽ có nhiều bảng hơn. Hoặc là bảng hiện giờ có tới cột E và D nhưng tùy thời điểm mà số cột sẽ thay đổi tới K và F. Viết cho trường hợp bất kỳ bao giờ cũng dài và phức tạp hơn. Nói cụt lủn thế ai biết cần lựa chọn thế nào?

Mà cho dù số bảng có thể thay đổi chứ không chỉ là 2 thì vị trí các bảng cũng thay đổi. Vd. bảng 1 hiện là A2:E18 nhưng do

nên tuỳ thời điểm mà có thể sẽ là vị trí A2:E50. Nếu trước bảng 1 hay mỗi bảng khác số dòng có chữ cũng thay đổi thì cũng sẽ không còn là A2:E50 mà là vd. A15:E63. Thế thì vị trí các bảng bạn định cung cấp bằng cách nào? Mắt bạn nhìn và đoán là A2:E50 nhưng code làm gì có nhìn bằng mắt. Dấu hiệu để code phát hiện vị trí của mỗi bảng (từ dòng tới dòng, từ cột tới cột) bạn cung cấp cho code bằng cách nào?

Hiện các text trước mỗi bảng chỉ có trong cột A (A1, A20, A22), trong trường hợp tổng quát có thế không hay ngày mai lại có thêm text ở vd. E1, D20? Những chi tiết cụ thể nhiều khi cho phép rút gọn code.

Thêm nữa nếu ngoài các bảng ra thì các dòng Text là không đổi theo năm tháng, thời cuộc, thời tiết thì nên làm tập tin Word mẫu mà trong đó chỉ có các text ngoài bảng và đánh dấu những chỗ chèn bảng. Lúc đó code chỉ việc mở tập tin Word rồi chèn các bảng.

Tóm lại làm khó hay không chưa bàn tới. Không phải ai cũng viết bừa code trên cơ sở không có mô tả để rồi sau đó sửa đi sửa lại theo tiến trình cuộc chơi "thông tin nhỏ giọt". Bạn hỏi nên bạn không tiếc thời gian của người khác.
Dạ, e, hiểu rồi anh. E cũng đã cố gắng diễn đạt và đưa Code mà em sưu tập được ạ để anh chị xem đó. Cơ bản chỉ là Code đó khi xuất dữ liệu ra Word thì định dạng/căn nề khó. Hoặc nếu a chị nào có code nào tốt hơn thì cho em xin với ạ. Hoặc có cách gì mà Copy ra WORD ưu việt hơn ngoài việc Copy tay thì chỉ giúp em ạ. Chứ thực tình em không muốn làm a chị mất time. A chị đã giúp là quý lắm rồi. Em cảm ơn ạ.
 
Upvote 0
Dạ, e, hiểu rồi anh. E cũng đã cố gắng diễn đạt và đưa Code mà em sưu tập được ạ để anh chị xem đó. Cơ bản chỉ là Code đó khi xuất dữ liệu ra Word thì định dạng/căn nề khó. Hoặc nếu a chị nào có code nào tốt hơn thì cho em xin với ạ. Hoặc có cách gì mà Copy ra WORD ưu việt hơn ngoài việc Copy tay thì chỉ giúp em ạ. Chứ thực tình em không muốn làm a chị mất time. A chị đã giúp là quý lắm rồi. Em cảm ơn ạ.
Bạn nói là bạn cố gắng diễn đạt nhưng khi người khác có thắc mắc và ghi rõ thắc mắc thì bạn lại không giải thích.

Thôi, tôi đã nói rồi. Tôi không thích chơi trò "thông tin nhỏ giọt" nên chỉ làm cho bạn 1 lần. Bạn không giải thích các thắc mắc của tôi thì tự tôi quyết định.

1. Code phục vụ trường hợp có ít nhất 1 bảng và số bảng tùy ý.

2. Các bảng phải ở các vị trí sao cho bảng sau phải đúng là ở "sau" bảng trước khi tính về dòng. Tức nếu 1 bảng kết thúc ở dòng k thì bảng sau phải bắt đầu từ dòng k+1 trở đi - tức k+n, với n >= 1. Không thể có trường hợp vd. bảng trước là A15:F44 và bảng sau là vd. là H43:K50 được (do 43 < 44).

3. Vị trí - địa chỉ từng bảng và vùng dữ liệu được cung cấp cho code bằng biến rangestr có cấu trúc
rangestr = Array(<địa chỉ bảng 1>, <địa chỉ bảng 2>, ..., <địa chỉ bảng n>, <địa chỉ toàn bộ vùng dữ liệu>)

3a.
<địa chỉ bảng ...> Trong tập tin của bạn có dạng "A2:E18", "A3: D25"
Nếu có thêm nhiều bảng thì viết thêm vào.
Các bảng phải được liệt kê trong rangestr theo thứ tự từ trên xuống dưới.

3b. <địa chỉ toàn bộ vùng dữ liệu> là địa chỉ toàn vùng dữ liệu cần copy sang Word. Với tập tin của bạn thì đó là "A1:E25". Nhưng để test thì tôi thêm giá trị cho các ô E1, D20 và F28. Vì thế với tập tin tôi đính kèm thì
Mã:
rangestr = Array("A2:E18", "A23:D25", "A1:F28")

4. Như tập tin đính kèm thì số bảng ít nhất là 1 và nhiều tùy ý. Trước mỗi bảng và sau mỗi bảng, tức cả sau bảng cuối cùng, có thể có hoặc không có các ô chứa chữ. Ở tập tin đính kèm thì sau bảng thứ 2 có ô chữ F28. Trước bảng 1 có 2 ô chữ là A1 và E1.

5. Các bảng sẽ được AutoFit. Trong tập tin bảng A2:E18 sang Word sẽ có độ rộng vượt quá độ rộng của giấy. Vì thế tôi dùng AutoFit.

Hãy tải về tập tin và chạy sub Export_to_Word
 

File đính kèm

Upvote 0
Bạn nói là bạn cố gắng diễn đạt nhưng khi người khác có thắc mắc và ghi rõ thắc mắc thì bạn lại không giải thích.

Thôi, tôi đã nói rồi. Tôi không thích chơi trò "thông tin nhỏ giọt" nên chỉ làm cho bạn 1 lần. Bạn không giải thích các thắc mắc của tôi thì tự tôi quyết định.

1. Code phục vụ trường hợp có ít nhất 1 bảng và số bảng tùy ý.

2. Các bảng phải ở các vị trí sao cho bảng sau phải đúng là ở "sau" bảng trước khi tính về dòng. Tức nếu 1 bảng kết thúc ở dòng k thì bảng sau phải bắt đầu từ dòng k+1 trở đi - tức k+n, với n >= 1. Không thể có trường hợp vd. bảng trước là A15:F44 và bảng sau là vd. là H43:K50 được (do 43 < 44).

3. Vị trí - địa chỉ từng bảng và vùng dữ liệu được cung cấp cho code bằng biến rangestr có cấu trúc
rangestr = Array(<địa chỉ bảng 1>, <địa chỉ bảng 2>, ..., <địa chỉ bảng n>, <địa chỉ toàn bộ vùng dữ liệu>)

3a.
<địa chỉ bảng ...> Trong tập tin của bạn có dạng "A2:E18", "A3: D25"
Nếu có thêm nhiều bảng thì viết thêm vào.
Các bảng phải được liệt kê trong rangestr theo thứ tự từ trên xuống dưới.

3b. <địa chỉ toàn bộ vùng dữ liệu> là địa chỉ toàn vùng dữ liệu cần copy sang Word. Với tập tin của bạn thì đó là "A1:E25". Nhưng để test thì tôi thêm giá trị cho các ô E1, D20 và F28. Vì thế với tập tin tôi đính kèm thì
Mã:
rangestr = Array("A2:E18", "A23:D25", "A1:F28")

4. Như tập tin đính kèm thì số bảng ít nhất là 1 và nhiều tùy ý. Trước mỗi bảng và sau mỗi bảng, tức cả sau bảng cuối cùng, có thể có hoặc không có các ô chứa chữ. Ở tập tin đính kèm thì sau bảng thứ 2 có ô chữ F28. Trước bảng 1 có 2 ô chữ là A1 và E1.

5. Các bảng sẽ được AutoFit. Trong tập tin bảng A2:E18 sang Word sẽ có độ rộng vượt quá độ rộng của giấy. Vì thế tôi dùng AutoFit.

Hãy tải về tập tin và chạy sub Export_to_Word
Em cảm ơn Anh đã tận tình giúp ạ. Em sẽ mày mò thêm hỗ trợ của anh ạ.
 
Upvote 0
Bạn nói là bạn cố gắng diễn đạt nhưng khi người khác có thắc mắc và ghi rõ thắc mắc thì bạn lại không giải thích.

Thôi, tôi đã nói rồi. Tôi không thích chơi trò "thông tin nhỏ giọt" nên chỉ làm cho bạn 1 lần. Bạn không giải thích các thắc mắc của tôi thì tự tôi quyết định.

1. Code phục vụ trường hợp có ít nhất 1 bảng và số bảng tùy ý.

2. Các bảng phải ở các vị trí sao cho bảng sau phải đúng là ở "sau" bảng trước khi tính về dòng. Tức nếu 1 bảng kết thúc ở dòng k thì bảng sau phải bắt đầu từ dòng k+1 trở đi - tức k+n, với n >= 1. Không thể có trường hợp vd. bảng trước là A15:F44 và bảng sau là vd. là H43:K50 được (do 43 < 44).

3. Vị trí - địa chỉ từng bảng và vùng dữ liệu được cung cấp cho code bằng biến rangestr có cấu trúc
rangestr = Array(<địa chỉ bảng 1>, <địa chỉ bảng 2>, ..., <địa chỉ bảng n>, <địa chỉ toàn bộ vùng dữ liệu>)

3a.
<địa chỉ bảng ...> Trong tập tin của bạn có dạng "A2:E18", "A3: D25"
Nếu có thêm nhiều bảng thì viết thêm vào.
Các bảng phải được liệt kê trong rangestr theo thứ tự từ trên xuống dưới.

3b. <địa chỉ toàn bộ vùng dữ liệu> là địa chỉ toàn vùng dữ liệu cần copy sang Word. Với tập tin của bạn thì đó là "A1:E25". Nhưng để test thì tôi thêm giá trị cho các ô E1, D20 và F28. Vì thế với tập tin tôi đính kèm thì
Mã:
rangestr = Array("A2:E18", "A23:D25", "A1:F28")

4. Như tập tin đính kèm thì số bảng ít nhất là 1 và nhiều tùy ý. Trước mỗi bảng và sau mỗi bảng, tức cả sau bảng cuối cùng, có thể có hoặc không có các ô chứa chữ. Ở tập tin đính kèm thì sau bảng thứ 2 có ô chữ F28. Trước bảng 1 có 2 ô chữ là A1 và E1.

5. Các bảng sẽ được AutoFit. Trong tập tin bảng A2:E18 sang Word sẽ có độ rộng vượt quá độ rộng của giấy. Vì thế tôi dùng AutoFit.

Hãy tải về tập tin và chạy sub Export_to_Word
Xin cho hỏi khi xuất ra mình có thể xuất vào 1 vùng cố định của file word không ah. Ví dụ: file word có 5 trang mình có thế xuất vào trang số 4 được ko vì dữ liệu 3 trang kia có thể chỉ là văn bản bình thuơng mà thôi.
 
Upvote 0
Xin cho hỏi khi xuất ra mình có thể xuất vào 1 vùng cố định của file word không ah. Ví dụ: file word có 5 trang mình có thế xuất vào trang số 4 được ko vì dữ liệu 3 trang kia có thể chỉ là văn bản bình thuơng mà thôi.
Nếu muốn dán từ Excel vào Word vào trang 4 thì phải có
Mã:
Const InsertPage = 4

Tên tập tin đã tồn tại phãi nhập vào filename

Trong tập tin ở bài #7 thay đoạn đầu
Mã:
Sub Export_to_Word()  'Xu?t d? li?u ra file Word
Const wdTableFormatApplyAutoFit = 16
Const wdFormatPlainText = 22
'Khai báo các bi?n
Dim wdapp As Object, wddoc As Object, workrng As Range, tablerng As Range
Dim k As Long, currRow As Long, lastRow As Long, rangestr
    rangestr = Array("A2:E18", "A23:D25", "A1:F28")
   
    Set wdapp = CreateObject("Word.Application")
    wdapp.Visible = True
    Set wddoc = wdapp.Documents.Add
bằng
Mã:
Sub Export_to_Word()
'    noi dung tap tin Excel se duoc chen vao dau trang InsertPage, tuc sau InsertPage-1
    Const InsertPage = 4
    Const wdNumberOfPagesInDocument = 4
    Const wdGoToPage = 1
    Const wdGoToAbsolute = 1
    Const wdPageBreak = 7
    Const wdTableFormatApplyAutoFit = 16
    Const wdFormatPlainText = 22
Dim wdapp As Object, wddoc As Object, workrng As Range, tablerng As Range
Dim PagesCount As Long, k As Long, currRow As Long, lastRow As Long, rangestr, filename As String
    rangestr = Array("A2:E18", "A23:D25", "A1:F28")
'    thay doi duong dan cho thich hop. Neu tap tin Word va Excel cung thu muc thi thay bang ThisWorkbook.path & "\test.doc"
    filename = "c:\test.doc"
   
    Set wdapp = CreateObject("Word.Application")
    wdapp.Visible = True
    Set wddoc = wdapp.Documents.Open(filename)
    PagesCount = wddoc.Range.Information(wdNumberOfPagesInDocument)
    With wdapp.Selection
        If InsertPage <= PagesCount Then
            .GoTo wdGoToPage, wdGoToAbsolute, InsertPage
        Else
            .Start = wddoc.Content.End
            .InsertBreak wdPageBreak
        End If
    End With
 
Upvote 0
Nếu muốn dán từ Excel vào Word vào trang 4 thì phải có
Mã:
Const InsertPage = 4

Tên tập tin đã tồn tại phãi nhập vào filename

Trong tập tin ở bài #7 thay đoạn đầu
Mã:
Sub Export_to_Word()  'Xu?t d? li?u ra file Word
Const wdTableFormatApplyAutoFit = 16
Const wdFormatPlainText = 22
'Khai báo các bi?n
Dim wdapp As Object, wddoc As Object, workrng As Range, tablerng As Range
Dim k As Long, currRow As Long, lastRow As Long, rangestr
    rangestr = Array("A2:E18", "A23:D25", "A1:F28")
 
    Set wdapp = CreateObject("Word.Application")
    wdapp.Visible = True
    Set wddoc = wdapp.Documents.Add
bằng
Mã:
Sub Export_to_Word()
'    noi dung tap tin Excel se duoc chen vao dau trang InsertPage, tuc sau InsertPage-1
    Const InsertPage = 4
    Const wdNumberOfPagesInDocument = 4
    Const wdGoToPage = 1
    Const wdGoToAbsolute = 1
    Const wdPageBreak = 7
    Const wdTableFormatApplyAutoFit = 16
    Const wdFormatPlainText = 22
Dim wdapp As Object, wddoc As Object, workrng As Range, tablerng As Range
Dim PagesCount As Long, k As Long, currRow As Long, lastRow As Long, rangestr, filename As String
    rangestr = Array("A2:E18", "A23:D25", "A1:F28")
'    thay doi duong dan cho thich hop. Neu tap tin Word va Excel cung thu muc thi thay bang ThisWorkbook.path & "\test.doc"
    filename = "c:\test.doc"
 
    Set wdapp = CreateObject("Word.Application")
    wdapp.Visible = True
    Set wddoc = wdapp.Documents.Open(filename)
    PagesCount = wddoc.Range.Information(wdNumberOfPagesInDocument)
    With wdapp.Selection
        If InsertPage <= PagesCount Then
            .GoTo wdGoToPage, wdGoToAbsolute, InsertPage
        Else
            .Start = wddoc.Content.End
            .InsertBreak wdPageBreak
        End If
    End With
Anh
Bạn nói là bạn cố gắng diễn đạt nhưng khi người khác có thắc mắc và ghi rõ thắc mắc thì bạn lại không giải thích.

Thôi, tôi đã nói rồi. Tôi không thích chơi trò "thông tin nhỏ giọt" nên chỉ làm cho bạn 1 lần. Bạn không giải thích các thắc mắc của tôi thì tự tôi quyết định.

1. Code phục vụ trường hợp có ít nhất 1 bảng và số bảng tùy ý.

2. Các bảng phải ở các vị trí sao cho bảng sau phải đúng là ở "sau" bảng trước khi tính về dòng. Tức nếu 1 bảng kết thúc ở dòng k thì bảng sau phải bắt đầu từ dòng k+1 trở đi - tức k+n, với n >= 1. Không thể có trường hợp vd. bảng trước là A15:F44 và bảng sau là vd. là H43:K50 được (do 43 < 44).

3. Vị trí - địa chỉ từng bảng và vùng dữ liệu được cung cấp cho code bằng biến rangestr có cấu trúc
rangestr = Array(<địa chỉ bảng 1>, <địa chỉ bảng 2>, ..., <địa chỉ bảng n>, <địa chỉ toàn bộ vùng dữ liệu>)

3a.
<địa chỉ bảng ...> Trong tập tin của bạn có dạng "A2:E18", "A3: D25"
Nếu có thêm nhiều bảng thì viết thêm vào.
Các bảng phải được liệt kê trong rangestr theo thứ tự từ trên xuống dưới.

3b. <địa chỉ toàn bộ vùng dữ liệu> là địa chỉ toàn vùng dữ liệu cần copy sang Word. Với tập tin của bạn thì đó là "A1:E25". Nhưng để test thì tôi thêm giá trị cho các ô E1, D20 và F28. Vì thế với tập tin tôi đính kèm thì
Mã:
rangestr = Array("A2:E18", "A23:D25", "A1:F28")

4. Như tập tin đính kèm thì số bảng ít nhất là 1 và nhiều tùy ý. Trước mỗi bảng và sau mỗi bảng, tức cả sau bảng cuối cùng, có thể có hoặc không có các ô chứa chữ. Ở tập tin đính kèm thì sau bảng thứ 2 có ô chữ F28. Trước bảng 1 có 2 ô chữ là A1 và E1.

5. Các bảng sẽ được AutoFit. Trong tập tin bảng A2:E18 sang Word sẽ có độ rộng vượt quá độ rộng của giấy. Vì thế tôi dùng AutoFit.

Hãy tải về tập tin và chạy sub Export_to_Word
Anh cho em hỏi thêm với ạ.
(1) Nếu các bảng em muốn xuất ra là dạng File ảnh (tức Paste Picture) thì làm thế nào ạ- Vì File ảnh sẽ gọn hơn nhiều ạ
(2) Nếu Font chữ trên WORD muốn xuất ra dạng Times new romance và cỡ chữ 12 thì làm thế nào ạ.

Em cảm ơn ạ !
 
Upvote 0
Anh

Anh cho em hỏi thêm với ạ.
(1) Nếu các bảng em muốn xuất ra là dạng File ảnh (tức Paste Picture) thì làm thế nào ạ- Vì File ảnh sẽ gọn hơn nhiều ạ
(2) Nếu Font chữ trên WORD muốn xuất ra dạng Times new romance và cỡ chữ 12 thì làm thế nào ạ.

Em cảm ơn ạ !
Tôi làm lần cuối

Trong tập tin bài #7 thực hiện các thay đổi sau
1. Ngay phần đầu thêm
Mã:
Const wdInLine = 0
Const wdPasteEnhancedMetafile = 9

2. Sau dòng
Mã:
Set wddoc = wdapp.Documents.Add
thì thêm
Mã:
With wdapp.Selection
    .Font.Name = "Times New Roman"
    .Font.Size = 12
End With

3. Thay
Mã:
.PasteExcelTable False, False, True
bằng
Mã:
.PasteSpecial 0, , wdInLine, , wdPasteEnhancedMetafile

4. Xóa
Mã:
wddoc.Tables(k + 1).AutoFormat Format:=wdTableFormatApplyAutoFit
 
Upvote 0
Tôi làm lần cuối

Trong tập tin bài #7 thực hiện các thay đổi sau
1. Ngay phần đầu thêm
Mã:
Const wdInLine = 0
Const wdPasteEnhancedMetafile = 9

2. Sau dòng
Mã:
Set wddoc = wdapp.Documents.Add
thì thêm
Mã:
With wdapp.Selection
    .Font.Name = "Times New Roman"
    .Font.Size = 12
End With

3. Thay
Mã:
.PasteExcelTable False, False, True
bằng
Mã:
.PasteSpecial 0, , wdInLine, , wdPasteEnhancedMetafile

4. Xóa
Mã:
wddoc.Tables(k + 1).AutoFormat Format:=wdTableFormatApplyAutoFit
Anh quá nhiệt tình rồi. Thôi thì vừa học lỏm vừa nhờ các anh cũng biết là làm khó cho các anh chị rồi. Em cảm ơn Anh ạ !
 
Upvote 0
Nếu muốn dán từ Excel vào Word vào trang 4 thì phải có
Mã:
Const InsertPage = 4

Tên tập tin đã tồn tại phãi nhập vào filename

Trong tập tin ở bài #7 thay đoạn đầu
Mã:
Sub Export_to_Word()  'Xu?t d? li?u ra file Word
Const wdTableFormatApplyAutoFit = 16
Const wdFormatPlainText = 22
'Khai báo các bi?n
Dim wdapp As Object, wddoc As Object, workrng As Range, tablerng As Range
Dim k As Long, currRow As Long, lastRow As Long, rangestr
    rangestr = Array("A2:E18", "A23:D25", "A1:F28")
  
    Set wdapp = CreateObject("Word.Application")
    wdapp.Visible = True
    Set wddoc = wdapp.Documents.Add
bằng
Mã:
Sub Export_to_Word()
'    noi dung tap tin Excel se duoc chen vao dau trang InsertPage, tuc sau InsertPage-1
    Const InsertPage = 4
    Const wdNumberOfPagesInDocument = 4
    Const wdGoToPage = 1
    Const wdGoToAbsolute = 1
    Const wdPageBreak = 7
    Const wdTableFormatApplyAutoFit = 16
    Const wdFormatPlainText = 22
Dim wdapp As Object, wddoc As Object, workrng As Range, tablerng As Range
Dim PagesCount As Long, k As Long, currRow As Long, lastRow As Long, rangestr, filename As String
    rangestr = Array("A2:E18", "A23:D25", "A1:F28")
'    thay doi duong dan cho thich hop. Neu tap tin Word va Excel cung thu muc thi thay bang ThisWorkbook.path & "\test.doc"
    filename = "c:\test.doc"
  
    Set wdapp = CreateObject("Word.Application")
    wdapp.Visible = True
    Set wddoc = wdapp.Documents.Open(filename)
    PagesCount = wddoc.Range.Information(wdNumberOfPagesInDocument)
    With wdapp.Selection
        If InsertPage <= PagesCount Then
            .GoTo wdGoToPage, wdGoToAbsolute, InsertPage
        Else
            .Start = wddoc.Content.End
            .InsertBreak wdPageBreak
        End If
    End With

Nhờ Anh Batman xem lại dùm em, Em chỉnh code bảng tính vào trang số 4 của file word nhưng sao bảng tính lại không autofix vừa khổ giấy!
Cảm ơn Anh
 

File đính kèm

Upvote 0
Bạn nói là bạn cố gắng diễn đạt nhưng khi người khác có thắc mắc và ghi rõ thắc mắc thì bạn lại không giải thích.

Thôi, tôi đã nói rồi. Tôi không thích chơi trò "thông tin nhỏ giọt" nên chỉ làm cho bạn 1 lần. Bạn không giải thích các thắc mắc của tôi thì tự tôi quyết định.

1. Code phục vụ trường hợp có ít nhất 1 bảng và số bảng tùy ý.

2. Các bảng phải ở các vị trí sao cho bảng sau phải đúng là ở "sau" bảng trước khi tính về dòng. Tức nếu 1 bảng kết thúc ở dòng k thì bảng sau phải bắt đầu từ dòng k+1 trở đi - tức k+n, với n >= 1. Không thể có trường hợp vd. bảng trước là A15:F44 và bảng sau là vd. là H43:K50 được (do 43 < 44).

3. Vị trí - địa chỉ từng bảng và vùng dữ liệu được cung cấp cho code bằng biến rangestr có cấu trúc
rangestr = Array(<địa chỉ bảng 1>, <địa chỉ bảng 2>, ..., <địa chỉ bảng n>, <địa chỉ toàn bộ vùng dữ liệu>)

3a.
<địa chỉ bảng ...> Trong tập tin của bạn có dạng "A2:E18", "A3: D25"
Nếu có thêm nhiều bảng thì viết thêm vào.
Các bảng phải được liệt kê trong rangestr theo thứ tự từ trên xuống dưới.

3b. <địa chỉ toàn bộ vùng dữ liệu> là địa chỉ toàn vùng dữ liệu cần copy sang Word. Với tập tin của bạn thì đó là "A1:E25". Nhưng để test thì tôi thêm giá trị cho các ô E1, D20 và F28. Vì thế với tập tin tôi đính kèm thì
Mã:
rangestr = Array("A2:E18", "A23:D25", "A1:F28")

4. Như tập tin đính kèm thì số bảng ít nhất là 1 và nhiều tùy ý. Trước mỗi bảng và sau mỗi bảng, tức cả sau bảng cuối cùng, có thể có hoặc không có các ô chứa chữ. Ở tập tin đính kèm thì sau bảng thứ 2 có ô chữ F28. Trước bảng 1 có 2 ô chữ là A1 và E1.

5. Các bảng sẽ được AutoFit. Trong tập tin bảng A2:E18 sang Word sẽ có độ rộng vượt quá độ rộng của giấy. Vì thế tôi dùng AutoFit.

Hãy tải về tập tin và chạy sub Export_to_Word
Anh ơi, Em hỏi Anh thêm chút ạ. Nếu giờ ngoài bảng xuất ra dạng ảnh được rồi, các chữ viết bình thường xuất được rồi, nhưng nếu có Biểu đồ trên File Excel khi xem xuất ra thì nó không xuât được ạ. Có cách nào để nó xuất ra mặt nhiên như xuất ra chữ bình thường không ạ. Hay bắt buộc chỉ tên rõ ràng biểu đồ đó mới có thể xuất ra ạ.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom