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, помогите пожалуйста
Я где-то на другом форуме тоже написал свой комментарий Или на этом? Не помню... Но могу повторить - этот код вообще не работает, даже до цикла не доходит. Инпутбоксы не те.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
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
Апострофф, я не понимаю что вы от меня хотите Hugo, огонь! работает) Спасибо! А можно как-то вставлять в ячейку функцию по кнопке надстройки? т.е. у меня сейчас своя надстройка, в ней есть функции которые появляются после знака равно по имени, а есть макросы которые срабатывают по кнопка в панели, но если на кнопку "посадить" функцию она не срабатывает, можно ли вызывать по кнопке функцию в ячейку?
ни в коем случае. окошки (запросы на выбор диапазонов) нужны чтобы можно было задать условия, по которым собственно работает макрос если этот макрос написан для себя - то и так сойдет а если будет пользоваться еще кто-то, то для посторонних - это шок, когда макрос вывалился по ошибке, и потом еще окно с вопросом и нужно выбрать нажать Debug или Cancеl, и если случайно выбрал Debug - то это следующее окно с вообще непостижимым содержанием и это следующая порция шока! все это не гуманно по отношению к пользователям и незначительными исправлениями кода от всего этого можно избавиться.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
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
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!