2016-11-01 37 views
4

我試圖寫一個宏來一次更改word文檔中所有表的所有邊界的顏色。更改所有表中的所有邊界的顏色字vba

我嘗試在做這個改變只在我的表的頂部和底部邊框:

Sub ChangeTableBordersColors() 
Dim mycolor As WdColor 
Dim myTable As Table 
mycolor = wdColorRed 
For Each myTable In ActiveDocument.Tables 
With myTable 
.Borders(wdBorderTop).Color = mycolor 
.Borders(wdBorderBottom).Color = mycolor 
.Borders(wdBorderHorizontal).Color = mycolor 
.Borders(wdBorderVertical).Color = mycolor 
.Borders(wdBorderLeft).Color = mycolor 
.Borders(wdBorderRight).Color = mycolor 
End With 
Next 
End Sub 

任何人都可以建議如何解決這一問題?

+0

我不能複製這個 - 你的代碼工作對我蠻好。 – Comintern

回答

1

我沒有得到完整的機制,但似乎你的代碼不工作時,一些邊界已分別設置。 首先重置LineStyle和LineWidth,然後顏色對我適用。
可以縮短下來到這一點:

With myTable 
     .Borders.InsideLineStyle = wdLineStyleSingle 
     .Borders.InsideLineWidth = wdLineWidth025pt 
     .Borders.InsideColor = mycolor 

     .Borders.OutsideLineStyle = wdLineStyleSingle 
     .Borders.OutsideLineWidth = wdLineWidth025pt 
     .Borders.OutsideColor = mycolor 
    End With 
+0

非常感謝 - 這一定是問題所在 - 我使用的文檔使用了不同的線條樣式,這些樣式已經單獨設置。我想用宏來改變所有的顏色而不會丟失單獨設置的線條樣式。似乎需要將樣式和顏色設置在一起。 – TimF

1

謝謝你這麼多KekuSemau - 一旦你指出什麼問題,我可以看到的解決方案。我的錯誤是在單獨設置邊界時嘗試處理整個表格。我需要分別處理每個細胞。

以下修改工作(雖然有點醜陋和可怕的慢!):

Sub ChangeTableBordersColors() 
Dim mycolor As WdColor 
Dim aTable As Table 
Dim i As Integer 
Dim j As Integer 
Dim Row As Integer 
Dim Column As Integer 

mycolor = wdColorRed 
For Each aTable In ActiveDocument.Tables 
i = aTable.Rows.Count 
j = aTable.Columns.Count 
For Row = 1 To i 
For Column = 1 To j 
    With aTable.Cell(Row, Column) 
    .Borders(wdBorderTop).Color = mycolor 
    .Borders(wdBorderBottom).Color = mycolor 
    .Borders(wdBorderLeft).Color = mycolor 
    .Borders(wdBorderRight).Color = mycolor 
    End With 
Next Column 
Next Row 
Next 
End Sub 
相關問題