2012-07-27 35 views
0

我想根據某些條件在範圍上添加條件格式。無法爲條件格式設置Size屬性

我想格式化顏色,大小,粗體等屬性。我能夠修改顏色,粗體屬性,但是當我嘗試修改Size屬性時,它會引發異常「無法設置Font類的Size屬性」。

任何人都可以幫助我如何設置條件格式對象的大小屬性。

也不可能設置下標或上標屬性。

注意:這些屬性也不是隻讀的。

  FormatCondition format =(FormatCondition)(targetSheet.get_Range("A1:A10", 
      Type.Missing).FormatConditions.Add(XlFormatConditionType.xlExpression, XlFormatConditionOperator.xlGreater, 
      "100", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing)); 

      format.Font.Bold = true; 
      format.Font.Color = 0x000000FF; 
      format.Font.Size = 14; 
      format.Font.Subscript = true; 

爲了說明實際的用例,我們舉一個例子,其中我有10 * 10的數據在excel中。這10 * 10是一個單獨的範圍與自己的格式。例如,從A1到J10。現在,如果我選擇此範圍內的任何單元格,則其相應的行和列應該有條件格式化,並且它將具有其自己的格式。這包括不同的填充顏色,不同的字體大小,邊界的變化等。如果我選​​擇單元格D4,則範圍A4:J4和D1:D10將應用條件格式。這可以通過在這兩個範圍上應用格式並選擇將Expression和其公式輸入爲true。現在,如果我選擇任何其他單元格,A4:J4和D1:D10單元格的格式應該恢復原樣,並且當前所選單元格的行和列應突出顯示。

我們可以更改格式,例如只有顏色或圖案。但不可能設置大小。任何人都可以解釋我爲什麼這樣。 可以從用戶界面更改大小。即使用條件格式的格式選項。使用可以改變滿足條件的單元的字體大小,顏色等。

從UI可能的事情應該也可以從代碼。

有共享的圖像來獲得一個觀點:http://imgur.com/bemI9

+0

正如Jendrik指出的,Excel明確指出:「對於條件格式,您可以設置字體樣式,下劃線,顏色和刪除線。」當您嘗試手動執行此操作時,所有其他選項也會變灰。 – Zairja 2012-07-27 13:39:31

+0

我對'Bold'屬性有同樣的問題。它適用於大多數*機器,但我有兩種情況下引發異常。這真是奇怪...... – Vache 2014-03-17 15:43:35

回答

0

試試下面的(你可以改變顏色值和字體大小,顏色等添加額外的屬性):

Dim fontSize As Variant 
Dim fontType As Variant 
Dim fontBold As Variant 
Dim cellIn As Variant 

Sub setVars() 

    With Range("A1") 
     fontSize = .Font.Size 
     fontType = .Font.Name 
     fontBold = .Font.Bold 
     cellIn = .Interior.Color 
    End With 


End Sub 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

    Application.ScreenUpdating = False 
    Application.EnableEvents = False 

    Dim r As Range 
    Set r = Range("A1:J10") 

    With r 
     .Font.Size = fontSize 
     .Font.Name = fontType 
     .Font.Bold = fontBold 
     .Interior.Color = cellIn 
    End With 

    With r.Rows(Target.Row) 
     .Interior.ColorIndex = 5 
     .Font.Bold = True 
    End With 

    With r.Columns(Target.Column) 
     .Interior.ColorIndex = 5 
     .Font.Bold = True 
    End With 

    Application.ScreenUpdating = True 
    Application.EnableEvents = True 

End Sub 
+0

有一點需要注意的是,這會影響'r'之外的單元格,所以你可能想做一個檢查'If Intersect(Target,r)是Nothing Then(別做任何事)Else(Do Stuff)End If '。請記住,「目標」將始終是任何選擇的左上角單元格。 – Zairja 2012-07-30 16:03:43

+0

謝謝Zairja快速回復。在這裏提供的示例中,您可以通過r.Invent.ColorIndex = 10來繪製範圍A1:J10的格式,r.Font.Bold = False,但我不知道A1:J10上的格式會是什麼樣子,因爲它們可能已經是在工作表上。給出的代碼將覆蓋ColorIndex = 10&Bold = False的格式。我需要保留A1:J10的格式。如果我只是評論這兩行代碼 r.Interior.ColorIndex = 10 r.Font.Bold = False 那麼我的舊格式不會保留。 並建議可以改變範圍的大小,但在這種情況下,它不會保留舊尺寸。 – 2012-07-31 06:46:51

+0

@RonakNisar看我的編輯。您將不得不將格式存儲在變量中(否則將原始格式複製到不會更改的表格中,並從那裏複製/粘貼格式)。首先運行'setVars()'(你甚至可以將它添加到一個workbook_open函數中,只要確保你明確引用了工作表)。請回答我的回答,因爲我已經回答了幾個問題。如果您有更多的問題,請將它們作爲新的單獨問題發佈,而不是在此問題上添加更多內容。謝謝! :) – Zairja 2012-07-31 12:44:43

0

我的研究說:「你不能改變字體在條件格式」。

我會那樣做在VBA:

For Each cell In Range("A1:A10") 
    With cell 
      .Font.Bold = true 
      .Font.Color = 0x000000FF 
      .Font.Size = 14 
    End With 
Next 
+0

但是,它如何允許編輯顏色,粗體,斜體,FontStyle,下劃線等。它在其某些屬性中給出了例外。如果你不能改變條件格式的字體,那麼它不能允許任何屬性。你給的解決方案是直接在Cell上應用格式。我想保留單元格的舊格式。使用條件格式,如果我刪除格式的舊格式的範圍自動保存。 – 2012-07-27 10:16:58

+0

@RonakNisar此外,沒有辦法檢查是否將條件格式應用於單元格,因此您必須對單元格的值執行相同的測試(例如A1> 100)。也就是說,也許你可以使用一個'Worksheet_Change'事件來根據它的值更新單元格的格式,然後如果這個值改變了,它將恢復到以前的格式。您可能還需要一個禁用格式化的功能,否則任何您嘗試更改的格式更改都將繼續生效。或者你可以有一個子應用格式,另一個刪除它。 – Zairja 2012-07-27 13:48:35

+0

我們不想使用Worksheet_Change事件,因爲我們已經對該事件進行了一些其他處理。 – 2012-07-30 11:58:40