从Excel VBA中的宏正确调用单元格公式

时间:2019-05-02 17:00:14

标签: excel vba excel-2019

我试图在excel中制定一些调度程序以更好地管理我的生活。对于每个事件,我使用不同的单元格颜色(黄色代表工作,红色代表大学,等等)。我已经有了一个宏CountColor,该宏可以在一定范围内对某种颜色的出现进行计数,该颜色可以正常工作(我几乎可以从在线解决方案中粘贴它)。我现在使用宏来计算像这样进入单元格的时间:

enter image description here

单元格包含=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:这是对问题中图片的正确使用吗?我想不出一种更好的方法来显示我希望输出的样子。

2 个答案:

答案 0 :(得分:3)

使颜色计数UDF易变会有所帮助(添加Application.Volatile),但是由于您发现更改颜色或单元格的格式不会触发重新计算,因此即使是易失的UDF也不会仅根据颜色变化来重新计算。

如果使UDF易失,则Range.Calculate应该会在自动计算模式下触发重新计算。

答案 1 :(得分:1)

我自己发现了问题。

首先,我要感谢大家的提示和技巧。在解决我的最初问题之后,我大概会需要它们,所以我事先将它们解决了:)

我的问题显然是,我想将业余时间宣布为白色。但是实际上我有几个单元格在将每个空闲单元格显色为白色后“没有填充颜色”,现在可以使用按钮了。不幸的是,工作表代码中使用Worksheet_Change()方法的解决方案无法正常工作,因为颜色变化未评估为工作表中的更改。 Worksheet_SelectionChange()然而,当您单击另一个单元格时,更新就完成了,所以我不再需要该按钮了。