Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与单元格属性相关的Excel VBA自定义项的自动计算_Vba_Excel_Excel Udf - Fatal编程技术网

与单元格属性相关的Excel VBA自定义项的自动计算

与单元格属性相关的Excel VBA自定义项的自动计算,vba,excel,excel-udf,Vba,Excel,Excel Udf,我已经编写了一个UDF来计算特定颜色和特定线型的单元格,我正在发布整个函数: Function CountTime(rData As Range, cellRefColor As Range) As Variant Dim indRefColor As Long Dim cellCurrent As Range Dim cntRes As Variant Application.Volatile cntRes = 0 indRefCo

我已经编写了一个UDF来计算特定颜色和特定线型的单元格,我正在发布整个函数:

Function CountTime(rData As Range, cellRefColor As Range) As Variant    

    Dim indRefColor As Long
    Dim cellCurrent As Range
    Dim cntRes As Variant

    Application.Volatile

    cntRes = 0
    indRefColor = cellRefColor.Cells(1, 1).Interior.Color
    For Each cellCurrent In rData
        If indRefColor = cellCurrent.Interior.Color Then
            cntRes = cntRes + 1
        End If
        If cellCurrent.Borders(xlDiagonalUp).LineStyle <> xlNone Then
            cntRes = cntRes + 0.5
        End If
    Next cellCurrent

    CountTime = cntRes
End Function
函数CountTime(rData作为范围,cellRefColor作为范围)作为变量
暗淡的颜色和长的颜色一样
暗淡的电池电流范围
作为变体的Dim-cntRes
应用程序。挥发性
cntRes=0
indRefColor=cellRefColor.Cells(1,1).Interior.Color
对于每个单元格,以rData为单位显示当前值
如果indRefColor=cellCurrent.Interior.Color,则
cntRes=cntRes+1
如果结束
如果cellCurrent.Borders(xlDiagonalUp).LineStyle xlNone,则
cntRes=cntRes+0.5
如果结束
下一单元电流
CountTime=cntRes
端函数
现在,我遇到的问题是,当
rData
中的一个单元格的颜色或线条属性发生更改时,公式不会自动计算。 我已经添加了<>代码>应用程序.Value,我还试图通过<代码> WorkSueTyTochange < /Case>子来触发计算,但是这不起作用,因为Excel似乎不考虑更改颜色到单元格/工作表的更改。 当用户在
rData
中更改单元格的颜色或线条属性时,是否有办法使单元格自动计算和更新

编辑--已解决 非常感谢ignotus,ChangeSelection工作区对于我来说已经足够好了。我没想到。
而且背景信息也很方便,非常感谢

我认为这是不可能的,但一个相当公平的解决方案是在您离开单元格或更改单元格时重新计算:

Private Sub Worksheet_Change(ByVal Target As Range)
    Me.Calculate
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Me.Calculate
End Sub
或者,在工作表上放置一个按钮,调用
Me.Calculate

仅供参考:什么是
Me

Me
指代码“所在”的父对象。如果您在工作表模块中写作,
Me
将引用该特定工作表

使用
Me
很方便,因为我们不必担心工作表名称的更改,而且对于未来的代码读者来说也很容易,因为他们不必记住“Main UserForm”是我们当前正在使用的用户表单。您可以对
Me
应用相同的方法,如果您提供了全名,则可以对对象应用相同的方法

活页1模块中,以下行的用途相同:

Worksheets("Sheet1").Range("A1").Select
Me.Range("A1").Select

如果您的函数执行速度非常快(例如,小于50毫秒),则可以从事件处理程序
私有子工作表\u SelectionChange(ByVal Target As Range)
调用它;用户不会注意到它的发生。此解决方案的另一个问题是当用户更改格式并立即离开工作表时。然后,如果您希望发生recalc,您可以使用
私有子工作表\u Deactivate()
来运行它。还有其他的可能性,不是防弹的,也不是简单的。

我想解决办法是你需要检查范围内的每个单元格是否有颜色变化。在更改呼叫您的UDF时,简短的回答(您有以下几种解决方法)是否。格式应用于反映数据,而不是作为数据使用。;)我就是这么说的。:-)我建议用户在单元格中键入一个值,通过条件格式更改颜色。这样计算起来就容易多了。但是不,人们习惯于使用颜色。变更管理:-)