2016-06-10 92 views
1

我想製作一個宏來自動格式化表格的單元格。 (在字2013宏來設置單元格格式

記錄所需的操作宏結果驗證碼:

With Selection.Cells(1) 
     .TopPadding = CentimetersToPoints(0) 
     .BottomPadding = CentimetersToPoints(0) 
     .LeftPadding = CentimetersToPoints(0.19) 
     .RightPadding = CentimetersToPoints(0.19) 
     .WordWrap = True 
     .FitText = False 
    End With 

運行一遍只適用於第一個單元格(看代碼後並不奇怪)的變化。

我試過圍繞它寫入適當的循環:

For Each c in Selection.Cells 
    .... 
Next c 

但它的性能是非常緩慢的,即使我轉的Screenupdating

有沒有更好的方法來處理宏?

+0

大概我們說話有多慢? –

+1

對於200個單元格的表格,在一個介質文檔(150-200頁)中,需要20-40秒,手動完成相同操作。 –

+0

你只是在修改表格中的一些單元嗎?如果大多數單元格需要具有相同的填充,那麼更改整個表格的單元格填充值(通過Selection.Tables(1).TopPadding等)是有意義的,然後重新填充需要它的單個單元格,並將wordwrap/fittext應用於所有單元格?在這裏,最後的過程似乎相對較快,但也許我的測試數據太簡單了。否則,我可以做的唯一速度改進是顯着的,但不是巨大的,通過將整個表格複製到一個新文檔,修改佈局,然後複製回來。 – 2016-06-11 16:09:14

回答

0

因爲我無法選擇VBA中的所有單元格,所以解決方法是創建一個臨時文檔,以便將表格複製到該表格中並在其中格式化並將其複製回來。

-1
Sub NimitTest02() 
    Dim oTbl As Table 
    Dim oCell As Cell 
    Dim i As Integer 
    Set oTbl = ActiveDocument.Tables(1) 
For i = 1 To ActiveDocument.Tables(1).Columns.Count 
    For Each oRow In oTbl.Rows 
    Set oCell = oRow.Cells(i) 
     oCell.Select 
    With Selection.Cells(1) 
     .TopPadding = CentimetersToPoints(0) 
     .BottomPadding = CentimetersToPoints(0) 
     .LeftPadding = CentimetersToPoints(0.19) 
     .RightPadding = CentimetersToPoints(0.19) 
     .WordWrap = True 
     .FitText = False 
    End With 
    Next 
Next 
End Sub 
+2

它值得一點解釋 –

+0

這只是我已經在問題中發佈的相同的代碼。 「環繞它......但是,即使我切換Screenupdating,它的表現也很慢。」 –