Страницы: 1
RSS
Счет суммы ячеек с заливкой: переделать функцию пользователя в отдельную процедуру
 
Есть функция, взята с Планеты:
Код
Public Function SumByColor(DataRange As Range, ColorSample As Range) As Double
     Dim Sum As Double
     Application.Volatile True
 
     For Each cell In DataRange 
         If cell.Interior.Color = ColorSample.Interior.Color Then
             Sum = Sum + cell.Value 
         End If
     Next cell 
     SumByColor = Sum 
 End Function
работает, все отлично. Ее надо перенести в макрос.
Код
Sub SumByColor()
     Dim rData As Range
     Dim cellRefColor As Range
     Dim Sum, SumByColor As Double
     Dim indRefColor As Long
     Dim cellCurrent As Range
     rData = InputBox("Âûáåðèòå ñòîëáåö ñóììèðîâàíèÿ.")
     cellRefColor = InputBox("Âûáåðèòå ÿ÷åéêó ñ öâåòîì, ïî êîòîðîìó áóäåò ñóììèðîâàíèå")
     indRefColor = cellRefColor.Cells(1, 1).Interior.Color
 
     Application.Volatile True
     For Each ñellCurrent In rData
         If indRefColor = ñellCurrent.Interior.Color Then
             Sum = WorksheetFunction.Sum(cellCurrent, Sum)
         End If
     Next cellCurrent
     ActiveCell.Value = Sum
 
End Sub
Ругается на цикл, хотя я его не трогал, говорит invalid next control variable reference, помогите пожалуйста
Изменено: bortnik27 - 09.02.2018 14:40:17
 
Какая же это функция!? Это и так макрос.
В 12-й строке замените ñellCurrent на cellCurrent. Вероятно русская С (эс) вместо аглицкой C (цэ)
Согласие есть продукт при полном непротивлении сторон
 
bortnik27, включайте RU-раскладку при копировании кода в тему.
А OPTION EXPLICIT избавил бы от трабла в момент зачатия.
 
Я где-то на другом форуме тоже написал свой комментарий :)
Или на этом? Не помню...
Но могу повторить - этот код вообще не работает, даже до цикла не доходит. Инпутбоксы не те.
Изменено: Hugo - 09.02.2018 10:25:36
 
Hugo, вроде на этом))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Блин :)
 
Sanja, вот это подстава, спасибо исправил
Hugo
, Да вы отвечали в ветке на другу тему, думаю лучше макрос обсуждать здась. Спасибо, я уже учел ваше замечание.
Сейчас код выглядит так:
Код
Sub SumByColor()
     Dim rData As Range
     Dim cellRefColor As Range
     Dim Sum, SumByColor As Double
     Dim indRefColor As Long
     Dim cellCurrent As Range
     rData = Application.InputBox("Âûáåðèòå ñòîëáåö ñóììèðîâàíèÿ.", Type:=8)
     cellRefColor = Application.InputBox("Âûáåðèòå ÿ÷åéêó ñ öâåòîì, ïî êîòîðîìó áóäåò ñóììèðîâàíèå", Type:=8)
     indRefColor = cellRefColor.Cells(1, 1).Interior.Color
  
     Application.Volatile True
     For Each cellCurrent In rData
         If indRefColor = cellCurrent.Interior.Color Then
             Sum = WorksheetFunction.Sum(cellCurrent, Sum)
         End If
     Next cellCurrent
     ActiveCell.Value = Sum

Но получаю ошибку 91 Object variable or With block variable not set" в строке rData = Application.InputBox
 
Цитата
bortnik27 написал:
variable not set
- это ведь объект, нужно
Код
set rdata = ....
 
bortnik27,
Цитата
SET rData =...
ВКЛЮЧАЙТЕ  RU-раскладку :evil:  
 
Апострофф, я не понимаю что вы от меня хотите
Hugo, огонь! работает) Спасибо!
А можно как-то вставлять в ячейку функцию по кнопке надстройки? т.е. у меня сейчас своя надстройка, в ней есть функции которые появляются после знака равно по имени, а есть макросы которые срабатывают по кнопка в панели, но если на кнопку "посадить" функцию она не срабатывает, можно ли вызывать по кнопке функцию в ячейку?  
 
название темы:
в заданном диапазоне посчитать сумму ячеек, имеющих указанную заливку.

даже когда указаны правильные типы Инпутбоксов, пользователь вдруг передумает (обломится) что-то считать, нажмет Esc и все рухнет по ошибке
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Вы имеете в виду что стоит убрать окошко ошибки?
 
ни в коем случае.
окошки (запросы на выбор диапазонов) нужны чтобы можно было задать условия, по которым собственно работает макрос
если этот макрос написан для себя - то и так сойдет
а если будет пользоваться еще кто-то, то для посторонних - это шок, когда макрос вывалился по ошибке, и потом еще окно с вопросом и нужно выбрать нажать Debug или Cancеl, и если случайно выбрал Debug - то это следующее окно с вообще непостижимым содержанием и это следующая порция шока! все это не гуманно по отношению к пользователям и незначительными исправлениями кода от всего этого можно избавиться.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
когда макрос вывалился по ошибке, и потом еще окно с вопросом и нужно выбрать нажать Debug или Cancеl,
Вот, я об этом окошке, буду крайне признателен если скажете как это можно организовать.
 
Код
Sub SumByColor()
     Dim rData As Range
     Dim cellRefColor As Range
     Dim Sum, SumByColor As Double
     Dim indRefColor As Long
     Dim cellCurrent As Range
     on error resume next
     set rData = Application.InputBox("Âûáåðèòå ñòîëáåö ñóììèðîâàíèÿ.", Type:=8)
     set cellRefColor = Application.InputBox("Âûáåðèòå ÿ÷åéêó ñ öâåòîì, ïî êîòîðîìó áóäåò ñóììèðîâàíèå", Type:=8)
     if err then exit sub
     on error goto 0
     indRefColor = cellRefColor.Cells(1, 1).Interior.Color
   
     Application.Volatile True
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Спасибо большое!
Страницы: 1
Читают тему
Наверх