VBA UDF для Excel выходит на первое место!после использования hidden = true на другом UDF - PullRequest
0 голосов
/ 25 сентября 2018

Я создал лист Excel с несколькими формулами для проекта.Затем я добавил CommandButton для свертывания / развертывания определенных групп ячеек.

Код 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, ячейки свертываются / растягиваются правильно, но ячейка с функцией суммирования по цвету становится VALUE !, тогда, если я нажму на панель формул внутри формулы и вернусь на лист,он автоматически исправляет себя, не меняя ничего.

Я пытался: a- Добавить пересчитать на кнопку, без кубиков.б) Откажитесь от функции, я пытался с другим кодом, она делает то же самое странное.c- Откажитесь, что формула сошла с ума, потому что она больше не могла "видеть" разрушенные клетки.Они видят их, когда я сворачиваю группу и «исправляю» формулу, щелкая по ней, она правильно суммируется, даже если в этот момент ячейки скрыты.

Любая помощь?Заранее спасибо

1 Ответ

0 голосов
/ 26 сентября 2018

Установите (как минимум) одну из ячеек, упомянутых в вашей функции, на «Грязный» при нажатии на кнопку команды.Это вызовет пересчет.

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 
...