Могу ли я добавить свою собственную функцию в настраиваемую строку состояния в Excel?

Если я выберу несколько ячеек в Excel, я увижу некоторые функции в настраиваемой строке состояния. Эта информация является моим собственным выбором из следующего:

  • В среднем
  • Считать
  • Числовой счет
  • Минимум
  • Максимум
  • Сумма

Я хочу добавить в этот список функцию, которая вычисляет соотношение непустых ячеек. Функция будет =COUNTA(диапазон)/(COUNTA(диапазон) + COUNTBLANK(диапазон)), но как я могу получить это в строке состояния? У меня нет большого опыта в VBA, поэтому некоторые пояснения приветствуются.


person Lewistrick    schedule 04.09.2013    source источник
comment
Я был заинтригован этим, поэтому немного поискал в Google. Придумал несколько ответов, где все говорят, что использование Application.StatusBar - единственный способ. Что прискорбно.. :( superuser.com/questions/476690/   -  person jerussell    schedule 04.09.2013
comment
Это! Я хотел бы, чтобы эти вещи были более настраиваемыми, например, добавление пользовательской функции в пользовательской строке состояния, когда вы щелкаете ее правой кнопкой мыши.   -  person Lewistrick    schedule 05.09.2013


Ответы (1)


Попробуйте что-то вроде этого (не лучший способ сделать это, но решает вашу цель)

Объяснение. Этот код проверяет, выбрал ли пользователь допустимый диапазон (минимум 2 ячейки), а затем использует Application.Evaluate для вычисления вашей формулы, а затем отображает ее в строке состояния. Также обратите внимание, что я не занимался обработкой ошибок. Я уверен, что вы позаботитесь об этом :)

Вставьте это в соответствующую область кода листа.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If TypeName(Target) = "Range" Then
        If Target.Cells.Count > 1 Then
            Application.StatusBar = "My Function: " & _
                                    Application.Evaluate( _
                                                          "=COUNTA(" & _
                                                           Target.Address & _
                                                           ") / (COUNTA(" & _
                                                           Target.Address & _
                                                           ") + COUNTBLANK(" & _
                                                           Target.Address & _
                                                           "))" _
                                                           )
        End If
    End If
End Sub

Это очень простой способ сделать это. Если вы хотите, чтобы он применялся ко всем листам, вам придется внести соответствующие изменения.

Также проблема с этим методом заключается в том, что он подавляет сообщения уровня приложения в строке состояния.

Скриншот

введите здесь описание изображения

person Siddharth Rout    schedule 04.09.2013
comment
Спасибо, вы могли бы сделать на 1 строку меньше, потому что если Target.Cells.Count = 1, также выбирается диапазон, и оценка функции должна быть 0 или 1. - person Lewistrick; 04.09.2013