2014-10-29 86 views
0

通常,我必須根據自定義屬性的內容更改單詞文檔的所有標題。例如,如果文檔原稿「狀態」發出的只是最後的所有標題,則所有標題必須在紅色背景中包含以粗體字寫的「草稿」。如果文檔是「最終」文檔,則不得出現DRAFT,並且背景必須爲「無」。字VBA控制標題中表格單元格的格式和內容

除了第一部分,我們的標題包含一個由一行和兩個單元格組成的表格。單元格1必須根據「狀態」翻轉,單元格2必須保持不變。

是否有任何已知解決方案(VBA或特定於單元格的「IF-THEN-ELSE語句」)根據狀態文檔屬性在整個文檔中更改單元格1的內容?目前,我必須滾動瀏覽所有部分並手動更改標題。

+0

您可以使用表格單元格中的字段嗎?您可以設置一個條件字段來檢查文檔變量的狀態(我假設屬性也是如此)。如果你對文檔有很大的控制權,我可以提供一個更全面的答案。 – Christina 2014-10-30 18:52:25

+0

是的:我可以自己定義標題。如果你能讓我知道如何做到這一點,我一定會感激。在此先感謝,Lukas – luke 2014-11-01 14:11:16

回答

0

請接受我承認一次。此後,我使用的宏用於我的目的:

Private Sub colorizeTableCells(ByVal oFields As fields, sStatus As String) 
    Dim objFld As field 
    Dim bgColor As WdColor 
    oFields.Update 
    For Each objFld In oFields 
     If objFld.Result.Information(wdWithInTable) = True And _ 
      objFld.Code Like "*IF*" And _ 
      objFld.Code Like "*DOCPROPERTY Status*" Then 
       bgColor = wdColorAutomatic 
       If sStatus = "DRAFT" Then 
        bgColor = wdColorRed 
       End If 
       objFld.Result.Cells(1).Shading.BackgroundPatternColor = bgColor 
     End If 
    Next objFld 
End Sub 
Sub processHeaderAndFooterFields() 
    Dim objDoc As Document 
    Dim objSect As Section 
    Dim objHeader As HeaderFooter 
    Dim objFooter As HeaderFooter 
    Dim sStatus As String 

    Set objDoc = ActiveDocument 
    sStatus = objDoc.CustomDocumentProperties("Status").Value 

    For Each objSect In objDoc.Sections 
     For Each objHeader In objSect.Headers 
      colorizeTableCells oFields:=objHeader.range.fields, sStatus:=sStatus 
     Next objHeader 
     For Each objFooter In objSect.Footers 
      colorizeTableCells oFields:=objFooter.range.fields, sStatus:=sStatus 
     Next objFooter 
    Next objSect 
End Sub 
0

您可以使用字段和宏來做到這一點。該字段將創建值,並且宏將更新它們以應對更改。

假設您正在使用文檔屬性狀態,如上所述。如果值爲「DRAFT」,表格中的文本將爲「This is a draft」,如果是其他內容,文本將爲「這不是草稿」。對於這些屬性,單詞可能會產生一些衝突,所以我要做的第一件事就是測試。將您的媒體資源設置爲DRAFT,然後創建一個字段以確保Word正在閱讀它。

任何地方,可以在文檔類型:

[Ctrl+F9] DOCPROPERTY Status 

這將導致文本看起來像

{DOCPROPERTY Status} 

但要注意,你必須用Ctrl + F9以獲得特殊字段括號。

現在切換字段代碼(選擇,右鍵單擊並選擇切換字段代碼)。如果它變成了草稿,說草稿你準備好了。如果沒有,你可能不會按照Word要你的方式來設置屬性。我這樣做的方法是轉到高級屬性,單擊自定義選項卡,查找列表中的狀態,添加值,然後單擊添加,以便它出現在下面。可能有其他的方式,但是可行。

一旦你已經受夠了那場成功的代碼,創建您的表一個新的,看起來像這樣(請記住,所有支架都用Ctrl + F9創建):

{ IF { COMPARE { DOCPROPERTY Status } = "DRAFT" } = 1 "This is a draft" "This is not a draft" } 

If語句比較compare語句的值爲1,兩個帶引號的字符串反映了if語句的計算結果爲true時將出現的內容以及計算結果爲false時出現的內容。切換字段代碼以查看您獲得的內容。

然後,您可以創建一個小宏來爲您更新它們,因此您不必手動更新每個宏。像這樣的東西應該工作:

Public Sub UpdateAllFields() 
Dim objDoc as Document 
Dim objSect As Section 
Dim objHeader As HeaderFooter, objFooter As HeaderFooter 

Set objDoc = ActiveDocument 

objDoc.Fields.Update 
For Each objSect In objDoc.Sections 
    For Each objHeader In objSect.Headers 
     objHeader.Range.Fields.Update 
    Next objHeader 
    For Each objFooter In objSect.Footers 
     objFooter.Range.Fields.Update 
    Next objFooter 
Next objSect 

End Sub 

我誤解並沒有意識到應用到這些表的顏色變化,因此增加一些事。

可以使用該字段更改字體顏色。更改上面的字段,使其看起來像這樣(記住關於Ctrl + F9)(爲了可讀性,我添加了一些換行符,不要在你的字段中包含這些字符。把它全部在一行上):

{ IF { COMPARE { DOCPROPERTY Status } = "DRAFT" } = 1 
{ QUOTE "This is a draft" \*Charformat } 
{ QUOTE "This is not a draft" \*Charformat } } 

然後選擇每個反過來報價領域和應用任何字體格式需要。您也可以用這種方式應用突出顯示;我認爲這不足以滿足您對整個單元格的遮蔽需求,但您可以嘗試一下,看看是否可以避免採取其他措施。

如果你一定要遮蔭整個小區,比你需要另一個宏。像這樣的東西應該這樣做:

Sub ChangeCol() 
Dim objDoc As Document 
Dim objTable As Table, objCell As Cell 
Dim objFld As Field 

Set objDoc = ActiveDocument 

For Each objFld In objDoc.Fields 
    If objFld.result.Information(wdWithInTable) = True And _ 
     objFld.Code Like "*IF*" And _ 
     objFld.Code Like "*DOCPROPERTY Status*" Then 
     If objDoc.CustomDocumentProperties("Status").Value = "DRAFT" Then 
      objFld.result.Cells(1).Shading.BackgroundPatternColor = wdColorRed 
     Else: objFld.result.Cells(1).Shading.BackgroundPatternColor = wdColorAutomatic 
     End If 
    End If 
Next objFld 
End Sub 

只需運行隨着UpdateFields宏來保持同步(或寫第三宏,同時觸發他們的,所以你不要忘了)。

+0

完美!非常感謝!是否也可以更改字段的顏色?紅色代表'DRAFT',無非DRAFT?先謝謝您的任何暗示,盧卡斯 – luke 2014-11-03 21:55:30

+0

這有可能改變文本高亮,而不是整個單元格底紋。不過,這可以通過VBA完成。你以後哪一個? – Christina 2014-11-03 22:47:06

+0

在草稿模式下,文本應該以淺紅色顯示深藍色,即應將細胞着色爲淺紅色。非常感謝! – luke 2014-11-05 06:14:38