【问题标题】:Excel VBA: function to turn activecell to boldExcel VBA:将活动单元格变为粗体的功能
【发布时间】:2011-08-28 02:22:00
【问题描述】:

我的模块中有以下功能。

Function Colorize(myValue)
    ActiveCell.Select
    Selection.Font.Bold = True
    Colorize = myValue
End Function

将使用此功能的单元格应该变为粗体 - 但是,我没有收到错误消息并且很遗憾,但确实如此,它没有变为粗体。我错过了什么?

谢谢

【问题讨论】:

  • 您是否在调试模式下运行代码?在Selection.Font.Bold = True之前和之后尝试debug.print activecell.font.bold
  • 请注意,如果从 VBA 调用,您的函数将按预期工作。正如@osknows 所指出的那样,如果从单元格公式中调用则不会。
  • 为了提高性能和可读性,应该避免使用整个.Select-Selection.白话。只需写ActiveCell.Font.Bold = True。除非你特别想选择一个单元格,当然……但大概 ActiveCell 已经被选中了。

标签: vba excel excel-2007


【解决方案1】:

UDF 只会返回一个值,它不允许您更改单元格/工作表/工作簿的属性。将您的代码移动到 Worksheet_Change 事件或类似的更改属性。

例如

Private Sub worksheet_change(ByVal target As Range)
  target.Font.Bold = True
End Sub

【讨论】:

  • 我明白了。但是,没有单个细胞事件吗?因为在 Worksheet_Change 中它会影响所有更改的范围。
  • 我正在阅读的 Excel 2007 书并没有真正阐明如何做到这一点。
  • 基本上我想要实现的是让一个函数评估一个范围的结果,并为其输出着色 - 但我更喜欢它在代码中而不是规则中。
  • 然后使用条件格式、worksheet_calculate 事件或包括进一步的条件来确定哪些单元格要加粗
  • 单个单元格事件可以通过 Change 触发器中的 If-Then-Else 语句“模拟”:If Target.Row=xx And Target.Column = yy Then跨度>
【解决方案2】:

我用

            chartRange = xlWorkSheet.Rows[1];
            chartRange.Font.Bold = true;

将第一行单元格字体变为粗体。它有效,我也在使用 Excel 2007。

你可以直接在VBA中调用

            ActiveCell.Font.Bold = True

使用这段代码,我在活动单元格中创建了一个时间戳,带有粗体和黄色背景

           Private Sub Worksheet_SelectionChange(ByVal Target As Range)
               ActiveCell.Value = Now()
               ActiveCell.Font.Bold = True
               ActiveCell.Interior.ColorIndex = 6
           End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2015-02-07
    • 2016-07-26
    相关资源
    最近更新 更多