【问题标题】:Not able to set Size property for Conditional Formatting无法为条件格式设置大小属性
【发布时间】:2012-07-25 19:17:32
【问题描述】:

我想根据某些条件在范围上添加条件格式。

我想格式化 Color、Size、Bold 等属性。我可以修改 Color、Bold 属性,但是当我尝试修改 Size 属性时,它会抛出异常“无法设置 Font 类的 Size 属性”。

谁能帮助我如何设置条件格式对象的 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;

为了弄清楚实际用例,让我们举一个例子,我在 excel 中有 10*10 的数据。这个 10*10 是具有自己格式的单个 Range。例如 A1 到 J10。现在,如果我选择此范围内的任何单元格,则其对应的行和列应该获得条件格式,并且它将具有自己的格式。这包括不同的填充颜色、不同的字体大小、边框的变化等。例如,如果我选择单元格 D4,则范围 A4:J4 和 D1:D10 将应用条件格式。这可以通过在这两个范围上应用格式并选择来完成类型为表达式,其公式为真。现在,如果我选择任何其他单元格,则应将 A4:J4 和 D1:D10 单元格的格式还原,并且应突出显示当前选定单元格的行和列。

我们可以更改格式,例如仅颜色或图案。但它无法设置大小。谁能解释我为什么会这样。 可以从用户界面更改大小。即使用条件格式的格式选项。使用它可以更改满足条件的单元格的字体大小、颜色等。

从 UI 中可以实现的事情也应该在代码中实现。

已分享图片以获取视图:http://imgur.com/bemI9

【问题讨论】:

  • 正如 Jendrik 指出的那样,Excel 明确指出“对于条件格式,您可以设置字体样式、下划线、颜色和删除线。”当您尝试手动执行此操作时,所有其他选项也会显示为灰色。
  • Bold 属性也有同样的问题。它适用于 大多数 机器,但我有两种情况会引发异常。真是奇怪……

标签: c# excel font-size conditional-formatting


【解决方案1】:

尝试以下操作(您可以更改颜色值并为字体大小、颜色等添加其他属性):

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

【讨论】:

  • 需要注意的是,这会影响r 之外的单元格,因此您可能需要检查If Intersect(Target, r) Is Nothing Then (Don't do anything) Else (Do Stuff) End If。请记住,Target 将始终是任何选择的左上角单元格。
  • 感谢 Zairja 的快速响应。在此处提供的示例中,您通过 r.Interior.ColorIndex = 10 r.Font.Bold = False 明确绘制 Range A1:J10 的格式,但我不知道 A1:J10 上的格式可能已经存在床单。给出的代码将覆盖 ColorIndex=10 & Bold=False 的格式。我需要保留 A1:J10 的格式。如果我只是评论代码的这两行 r.Interior.ColorIndex = 10 r.Font.Bold = False 那么我的旧格式不会保留。正如建议的那样,可以更改范围的大小,但在这种情况下,它不会保留旧的大小。
  • @RonakNisar 查看我的编辑。您必须将格式存储在变量中(否则将原始格式复制到不会更改的工作表并从那里复制/粘贴格式)。首先运行setVars()(您甚至可以将其添加到workbook_open 函数中,只要确保明确引用工作表即可)。请接受我的回答,因为我已经回答了几个问题。如果您有更多问题,请将它们作为新的单独问题发布,而不是在此问题上添加更多问题。谢谢! :)
【解决方案2】:

我的研究表明:“您无法在条件格式中更改字体”。

我会在 VBA 中这样做:

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

【讨论】:

  • 但是它如何允许编辑颜色、粗体、斜体、字体样式、下划线等。它在某些属性中给出了异常。如果您不能更改条件格式的字体,那么它一定不允许任何属性。你给出的解决方案是直接在 Cell 上应用格式。我想保留单元格的旧格式。如果我删除格式,则使用条件格式自动保留该范围的旧格式。
  • @RonakNisar 此外,没有办法检查条件格式是否应用于单元格,因此您必须对单元格的值执行相同的测试(例如 A1 > 100) .也就是说,也许您可​​以使用Worksheet_Change 事件根据其值更新单元格的格式,然后如果值更改,它将恢复为以前的格式。您可能还需要一个完全禁用格式设置的功能,否则您尝试更改的任何格式更改都将继续生效。或者你可以让一个子应用格式,另一个删除它。
  • 我们不想使用 Worksheet_Change 事件,因为我们已经对该事件进行了一些其他处理。
  • @Zairja 在同一个线程中添加了一个新问题,以使用例更加清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多