2017-06-27 645 views
0

我剛剛開始使用VBA,使用我的Word 2010舊副本。我想調整三列表格中兩​​列的大小,並格式化文本在列中。通過Word的宏錄製生成此代碼:在Word 2010中使用VBA更改表格中的列寬

Selection.ConvertToTable Separator:=wdSeparateByCommas, NumColumns:=3, _ 
     NumRows:=14, AutoFitBehavior:=wdAutoFitContent 
    With Selection.Tables(1) 
     .Style = "Table Grid" 
     .ApplyStyleHeadingRows = True 
     .ApplyStyleLastRow = False 
     .ApplyStyleFirstColumn = True 
     .ApplyStyleLastColumn = False 
    End With 
    Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter 

現在我想前兩列爲1.3英寸寬,第三列是5.1英寸寬。然後我想更改第三列中文本的格式以增加字體大小。當我調整列的大小時,宏錄製器似乎沒有記錄。有關如何編輯此代碼的任何建議?

回答

0

控制表很複雜。 Word以它認爲合適的方式完成了大部分工作,但如果您使用VBA,則必須採取控制措施。真的不可取,你應該通過調用Selection對象來讓你的生活更加悲慘。例如,嘗試使對象成爲表格本身。

Dim Tbl As Table 
Set Tbl = ActiveDocument.Tables.Add(Range:=Selection.Range, _ 
         NumRows:=14, _ 
         NumColumns:=3, _ 
         DefaultTableBehavior:=wdWord8TableBehavior, _ 
         AutoFitBehavior:=wdAutoFitFixed) 
' wdWord8TableBehavior = doesn't change table size to match content 

表格將被插入到選擇之後。運行此代碼之前,您可能想要摺疊選擇範圍。但是現在你已經有了一個表格對象,你可以在沒有選擇任何東西的情況下將其格式化爲你的內容。有幾十個屬性。其中您將要確定的其中之一是Tbl.PreferredWidth = InchesToPoints(7.7) Word不會自動將此屬性設置爲列的總寬度。

你的表有3列,你可以地址Tbl.Columns(1)到3.您可以設置寬度爲每列,像Tbl.Columns(3).Width = InchesToPoints(5.1)

同樣,你可以解決每個行作爲Tbl.Rows(1)以上。單獨的單元格按行和列編號尋址,例如,Tbl.Cell(1, 3)這是第一行中的第三個單元格。避免合併單元格,因爲這會阻止VBA將其計數。

單元格中的文本包含在其範圍內,例如,Tbl.Cell(1, 3).Range.Text。你可以讀寫這個屬性。請記住,Word會在每個單元格範圍的末尾保留段落結束標記。當你寫一個單元格時,Word會爲你添加它,即使你想自己添加它。但是,當你讀一個單元格的文本,你需要刪除的最後一個字符,例如,

Dim Rng As Range 
Set Rng = Tbl.Cell(1, 3).Range 
With Rng 
    .End = .End - 1 
    Fun = .Text 
End With 

這裏Fun是包含的單元格的內容的實際文本部分變量(作爲字符串)。

您可以將單元格中的段落作爲範圍的一部分進行尋址,例如Tbl.Cell(1, 3).Range.Paragraphs(1)。我總是避免將多於一段的段落放入任何單元格中。但是,您可以將更多段落作爲(2)等。您可以將所有段落的格式應用於每個單元格中的每個段落,並且每個段落中的所有文本都可以使用所有格式的Word可用於文本。