VBA Excel函数设置调用单元.NumberFormat属性

时间:2013-09-13 14:00:15

标签: excel vba number-formatting

我创建了这个函数,它可以将值放入单元格,但它不能设置.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”,但在表格中它将显示为“新年”

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用Worksheet_Change事件:

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

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

当您最初在单元格中输入函数时,它将触发更改事件,并且此子例程将执行。

Per Gary的评论(如下),重新计算现有公式不会触发此事件

答案 2 :(得分:0)

  1. 您的工作表/书中有多少计算?

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

    如果对第一个问题回答是“是”,我不建议使用易失性函数触发器,没有人应该这样做。你接下来做的事情取决于第二个问题的答案。

  3. 为什么不尝试“条件格式化”,虽然它可能有点贵。否则,如果年份单元格应该在有组织的列或单元格中,请确保其格式是现成的....如果这些都不适用,您可以给我们一个更好的图片,如果您的工作表的结构/设计... < / p>