【问题标题】:VBA Excel Function to Set the Calling Cell .NumberFormat PropertyVBA Excel 函数设置调用单元格 .NumberFormat 属性
【发布时间】:2013-09-18 06:10:31
【问题描述】:

我创建了这个函数,它可以将值放入单元格,但无法设置 .NumberFormat 属性。

Public Function NewYears(year As Integer)
    'Determine the cell that called the function
    Dim rng As range
    Set rng = ThisWorkbook.Sheets("How-To").range(Application.Caller.Address)
    MsgBox rng.Address
    fxFormat = "[$" & holidayName & "]"
    NewYears = DateSerial(year, 1, 1)
    rng.NumberFormat = fxFormat  
End Function

更新了解更多信息:

我将拥有像 =NewYears() 这样返回日期的函数。

我会在任何假期都这样做。我想格式化仍然存储日期但 .NumberFormat 属性具有假期名称的字段

所以 =NewYears() 将返回“01/01/2014”,但在工作表中它会显示为“新年”

【问题讨论】:

  • Kairan 这绝对不是关于图纸设计/结构的信息。通常人们确实知道如何打电话给UDF... ;-)

标签: excel vba number-formatting


【解决方案1】:

函数只能返回值或操作注释,不能直接修改格式。

【讨论】:

  • 我可以说,调用另一个接受范围的 Sub 并且 Sub 可以操作它吗?我当然会试一试
  • 您可以调用 sub 来格式化单元格,但不能从 UDF 中调用。
  • 使用 sub 来格式化单元格。直接运行 sub 而不是从函数内部调用。
  • 请参阅 this answer 以了解针对此 UDF 限制的相当丑陋的解决方法
【解决方案2】:

使用Worksheet_Change 事件:

Private Sub Worksheet_Change(ByVal Target As Range)
    Target.Interior.ColorIndex = 39
    Target.NumberFormat = "mm/dd/yyyy" 
End Sub

将此代码放在Sheets("How-To") 代码模块中。修改为您要格式化的任何颜色/等。

当你最初在单元格中输入函数时,它会触发更改事件并执行该子程序。

根据 Gary 的 cmets(下),重新计算现有公式不会触发此事件

【讨论】:

  • 我不相信 Work_Change 会被函数计算触发,你需要一个Calculate事件宏来做到这一点。
  • 啊,我认为你是对的。我只是通过输入单元格中的函数来测试它,这当然会触发更改。
  • 这种情况下,进入函数会初始设置数字格式。不确定这是否需要根据 OP 进行更改,但您@Gary'sStudent 的评论非常好。
【解决方案3】:
  1. 您的工作表/书中有多少计算?

  2. 单元格是在特定排列的列中还是随处可见还是随机的?

    如果对第一个问题的回答是肯定的,我不会建议使用 volatile 函数触发,那么没人应该这样做。你接下来要做的事情取决于第二个问题的答案。

您为什么不尝试“条件格式”,虽然它可能有点贵。否则,如果“年份”单元格应位于有组织的列或单元格中,请确保其格式为最新的....如果这些都不适用,如果您的工作表的结构/设计...

【讨论】:

  • 我在原始帖子中添加了其他信息 - 我认为有条件的会很困难,因为我的假期日期可能经常更改(原因我无法快速解释)
猜你喜欢
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多