0

我试图在 excel 中制定一个小调度程序来更好地管理我的生活。我为每个事件使用不同的单元格颜色(黄色表示工作,红色表示大学等)。我已经有一个宏CountColor,它可以计算在一定范围内出现的颜色,效果很好(我几乎是从在线解决方案中复制粘贴的)。我现在使用宏来计算使用时间到单元格中,如下所示:

在此处输入图像描述

单元格包含=ColorCount(H5;B2:F15),而第一个参数的内部颜色确定要计数的颜色,而 seconds 参数是计算颜色的范围。这个宏工作正常。最后一个数字只是上述三个的总和。

然而,我现在面临的问题是,更改单元格的内部颜色不会触发公式的重新计算。我创建了一个简单的按钮(不是 ActiveX 按钮)并为其分配了一个宏:

Public Sub CalcButton_onclick()
    Worksheets(1).Range("I13:I16").Calculate
End Sub

但是当我单击按钮时(我也尝试使用重新计算整个工作表Worksheets(1).Calculate)没有任何反应。例如,只有当我更改单元格中的值时,我的时间才会重新计算。我的按钮的宏肯定被执行了,我通过Worksheets(1).Cells(20, 20).Value = "Test"Calculate调用后添加来测试它,它正确地改变了给定单元格的值。

为了完成,我还添加了 CountColor 宏的代码:

'counts the occurence of the interior color of rColor in rRange
Public Function ColorCount(ByRef rColor As Range, ByRef rRange As Range) As Integer
    Dim rCell As Range
    Dim lCol As Long
    Dim vResult As Integer
    vResult = 0
    lCol = rColor.Interior.ColorIndex
    For Each rCell In rRange
        If rCell.Interior.ColorIndex = lCol Then
            vResult = 1 + vResult
        End If
    Next rCell
    ColorCount = vResult
End Function

我不太确定问题是什么,但我相信我可能误解了该Calculate方法。我只创建了上面的 2 个宏。我感谢任何帮助!

顺便说一句meta:这是在问题中正确使用图片吗?我想不出更好的方法来展示我希望输出的样子。

4

2 回答 2

3

使您的 colorcount UDF 易失会有所帮助(添加 Application.Volatile),但正如您发现的那样,更改单元格的颜色或格式不会触发重新计算,因此即使是易失的 UDF 也不会仅在颜色更改时重新计算。

如果你让你的 UDF 不稳定,那么 Range.Calculate 应该在自动计算模式下触发重新计算。

于 2019-05-02T17:10:41.990 回答
1

我自己发现了问题。

首先,我要感谢大家的提示和提示。在解决我最初的问题后,我可能需要它们,所以我提前修复了它们:)

我的问题实际上显然是,我想将我的业余时间声明为白色。但实际上我有几个单元格在将每个空闲单元格显式地着色为白色后“没有填充颜色”,现在它可以与按钮一起使用。不幸的是,工作表代码中的方法解决方案Worksheet_Change()不起作用,因为颜色变化没有被评估为工作表中的变化。Worksheet_SelectionChange()但是,当您单击另一个单元格时,更新的诀窍是这样的,所以我不再需要该按钮了。

于 2019-05-03T13:42:09.860 回答