Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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自定义项值!在另一个UDF上使用hidden=true后_Excel_Vba_User Defined Functions - Fatal编程技术网

Excel的VBA自定义项值!在另一个UDF上使用hidden=true后

Excel的VBA自定义项值!在另一个UDF上使用hidden=true后,excel,vba,user-defined-functions,Excel,Vba,User Defined Functions,我已经为一个项目建立了一个包含几个公式的Excel工作表。然后,我添加了一个用于折叠/展开某些单元格组的CommandButton 命令按钮代码为: Private Sub CommandButton1_Click() Columns("B").ColumnWidth = 30 With Me.CommandButton1 If .Caption = "Customer Relationship" & vbCrLf & "Management Processes" Th

我已经为一个项目建立了一个包含几个公式的Excel工作表。然后,我添加了一个用于折叠/展开某些单元格组的CommandButton

命令按钮代码为:

Private Sub CommandButton1_Click()

Columns("B").ColumnWidth = 30
With Me.CommandButton1
    If .Caption = "Customer Relationship" & vbCrLf & "Management Processes" Then
        .Caption = "Customer Relationship" & vbCrLf & "Management Processes "
        Rows("11:74").Hidden = False
    Else
        .Caption = "Customer Relationship" & vbCrLf & "Management Processes"
        Rows("11:74").Hidden = True
    End If
    'Worksheets(1).Calculate
End With
End Sub
它工作正常。现在,在工作表上,我有一个单元格,它使用另一个UDF根据其背景颜色对单元格求和,该单元格的代码是:

Function ColorFunction(rColor As Range, rRange As Range, 
Optional SUM As Boolean)
    Dim rCell As Range
    Dim lCol As Long
    Dim vResult
    lCol = rColor.Interior.ColorIndex

If SUM = True Then
    For Each rCell In rRange
      If rCell.Interior.ColorIndex = lCol Then
        vResult = WorksheetFunction.SUM(rCell, vResult)
      End If
    Next rCell
Else
    For Each rCell In rRange
      If rCell.Interior.ColorIndex = lCol Then
        vResult = 1 + vResult
      End If
    Next rCell
End If
ColorFunction = vResult
End Function
而且它也很有魅力。问题来了:当我按下CommandButton时,单元格会正确折叠/展开,但具有“按颜色求和”功能的单元格会变为“值”!,然后,如果我点击公式内的公式栏并返回工作表,它会自动修复自身,而无需我更改任何内容

我试图: a-在按钮上添加重新计算,无骰子。 放弃这个函数,我用其他代码尝试过,它做了同样奇怪的事情。 c-放弃公式已经发疯的说法,因为它再也看不到塌陷的细胞了。它确实看到了它们,当我折叠组,点击“修复”公式时,它正确地求和,即使此时单元格被隐藏

有什么帮助吗? 提前感谢

单击命令按钮时,将函数中提到的一个单元格设置为“脏”。这将触发重新计算

Private Sub CommandButton1_Click()

Columns("B").ColumnWidth = 30
With Me.CommandButton1
    If .Caption = "Customer Relationship" & vbCrLf & "Management Processes" Then
        .Caption = "Customer Relationship" & vbCrLf & "Management Processes "
        Rows("11:74").Hidden = False
    Else
        .Caption = "Customer Relationship" & vbCrLf & "Management Processes"
        Rows("11:74").Hidden = True
    End If
    'Worksheets(1).Calculate
End With
Cells(1, 6).Dirty 'For Cell F1
End Sub 

我认为您需要研究一下
应用程序。Volatile
。我按照您的建议进行了研究。现在,行为是一样的,只是当我单击使用该函数的一个单元格时,所有其他使用该函数的单元格也会自行修复。也许可以将
SUM
更改为另一个名称,以避免与内置函数冲突。返回什么数据类型?仅供参考,UDF中出现的错误是“无法获取范围类的内部属性”,并且在尝试读取
rColor
的ColorIndex时发生。但我不知道为什么会有人这么说。