VBA Xuất Table từ Excel to Word - Vấn đề AutoBehavior

Liên hệ QC

TanNguyen23

Thành viên mới
Tham gia
6/2/20
Bài viết
4
Được thích
0
Xin chào GPE, mình là mem mới của forum, cũng là mem mới mới gia nhập VBA Excel

Mình đang làm code để copy Table vào Word (vào Bookmark đã insert sẵn),
vấn đề là khi code copy Table xong, mình code để AutoFitContents và AutoFitWindow cái Table vừa copy, thì báo lỗi (như hình)

1.PNG

Mình xin hỏi dòng code "wdApp.Tables(1).AutoFitBehavior (1)" này số (1) trong Tables(1) có ý nghĩa gì với ạ, là tên hay là một tính năng nào đó ạ?
nên điều chỉnh code như nào để AutoFitBehavior được ạ?

Mong cộng đồng GPE giúp đỡ. Xin cảm ơn
File word có insert Bookmark mình trích ra đây ạ.
2.PNG
 
Nhìn Set wdApp = CreateObject("Word.Application") là biết wdApp là đối tượng Application. Đối tượng này không có thuộc tính Tables, vì thế có Compile error.

Đối tượng Document có thuộc tính Tables. Thuộc tính này là collection các bảng trong tập tin được đại diện bởi đối tượng Document. Tức nếu trong tập tin có 17 bảng thì thuộc tính Tabes (của đối tượng document) là tập hợp 17 bảng. Tables(1), Tables(2), ..., Tables(17) là Table - bảng thứ 1, ..., Table - bảng thứ 17.

Tóm lại nếu tôi hiểu ý thì phải là ActiveDocument.Tables(1) ... "bla blala hic hic".
 
Upvote 0
Nhìn Set wdApp = CreateObject("Word.Application") là biết wdApp là đối tượng Application. Đối tượng này không có thuộc tính Tables, vì thế có Compile error.

Đối tượng Document có thuộc tính Tables. Thuộc tính này là collection các bảng trong tập tin được đại diện bởi đối tượng Document. Tức nếu trong tập tin có 17 bảng thì thuộc tính Tabes (của đối tượng document) là tập hợp 17 bảng. Tables(1), Tables(2), ..., Tables(17) là Table - bảng thứ 1, ..., Table - bảng thứ 17.

Tóm lại nếu tôi hiểu ý thì phải là ActiveDocument.Tables(1) ... "bla blala hic hic".
Ok. Thanks bạn nhiều. Có tiến triển xíu rồi nè, v là mình thay khai báo biến Word.Application thành Object nhỉ?

Không biết còn phương án nào thay thế cách dùng số thứ tự để chỉ điểm bảng không? ví dụ như dùng tên cho bảng vừa copy? Bởi vì file mình làm rất nhiều bảng :"))
 
Upvote 0
Không biết còn phương án nào thay thế cách dùng số thứ tự để chỉ điểm bảng không? ví dụ như dùng tên cho bảng vừa copy? Bởi vì file mình làm rất nhiều bảng :"))
Muốn làm gì thì cũng phải đính kèm tập tin cụ thể, và dựa vào nó mô tả vấn đề, yêu cầu. Nói chung chung thế ai đoán được ý?
----------------
Nếu bạn muốn thao tác với bảng vừa được dán vào Word thì một vài thông tn hữu ích:
- bảng vừa được dán vào sẽ là vùng được chọn - "bôi đen".
- Đối tượng Selection cũng có thuộc tính Tables - collection các bảng có trong vùng đang được chọn.
- vùng đang chọn sau khi dán bảng vào word chứa đúng 1 bảng nên đó cũng là bảng duy nhất trong tập hợp Tables. Tức bảng đó chính là Selection.Tables(1).

Code ví dụ
Mã:
Sub templateTC()
Const wdLineStyleNone = 0
Const wdAutoFitContent = 1

Dim wdApp As Object
Dim WordTable As Object
Dim SaveName As String
Dim FileExt As String
    Set wdApp = CreateObject("Word.Application")
    With wdApp
        .Visible = True
        .Documents.Open "E:\Tan Nguyen\2020VBA_Phuluc2020.docx"
        Sheets("Phuluc").Range("A2:M10").Copy
        .Selection.Goto what:=-1, Name:="PHULUC_1"
        .Selection.PasteExcelTable False, True, False
        With .Selection.Tables(1)
            .AutoFitBehavior wdAutoFitContent
            .Borders.InsideLineStyle = wdLineStyleNone  ' nếu cần kẻ lưới thì bỏ dòng này
            .Borders.OutsideLineStyle = wdLineStyleNone ' nếu cần kẻ lưới thì bỏ dòng này
        End With
        SaveName = Environ("UserProfile") & "\Tan Nguyen\Phuluc2020" & Format(Now, "yyyy-mm-dd hh-mm-ss") & ".docx"
        .ActiveDocument.SaveAs2 SaveName
        .ActiveDocument.Close
        .Quit
    End With
    Set wdApp = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom