Всем привет. Пытаюсь сделать свою функцию, одно из условий проверяет формат другой ячейки. Однако не получается правильно прописать условия...
Код
Public Function Myfunc(Знач1 As Long, Знач2 As Long)
If Знач1 = Cell.Style = "Percent" Or Знач2 = Cell.Style = "Percent" Then
Myfunc = "N/A"
ElseIf Знач1 =1 Then
Myfunc = Знач1
ElseIf Знач2 =2 Then
Myfunc = Знач2
End Function
В принципе разные варианты пробовал, но просто только когда уже знаешь синтаксис. Поиск ничего полезного не дал...
Хотите получить формат ячейки, но указываете значение... Непонятно, что хотите получить, если форматы не процентные. Если в первой ячейке 1, то до проверки второй ячейки не дойдет.
Цитата
G-man написал: но просто только когда уже знаешь синтаксис.
Вот-вот... Не стесняйтесь спрашавать в справке или в сети. Ошибок в коде много.
Код
Public Function Myfunc(rRng1 As Range, rRng2 As Range)
If rRng1.NumberFormat = "0.00%" Or rRng2.NumberFormat = "0.00%" Then
Myfunc = "N/A"
ElseIf rRng1.Value = 1 Then
Myfunc = 1
ElseIf rRng2.Value = 2 Then
Myfunc = 2
End If
End Function
Порядок условий: - если одна из ячеек имеет процентный формат, то "N/A" - если первая ячейка со значением 1, то 1 - если вторая ячейка со значением 2, то 2 - если все условия ложные , то 0
Нехорошо, когда функция может показать разные типы данных (здесь: текст и число). Отображение ошибки ("N/A") - тоже не лучший вариант. Потом, возможно, придется обходить такую ошибку.
Public Function Myfunc(rRng1 As Range, rRng2 As Range)
If rRng1.NumberFormat = "0.00%" Or rRng2.NumberFormat = "0.00%" Then
Myfunc = "N/A"
ElseIf rRng1.Value = 1 Then
Myfunc = 1
ElseIf rRng2.Value = 2 Then
Myfunc = 2
End If
End Function
Порядок условий: - если одна из ячеек имеет процентный формат, то "N/A"; - если первая ячейка со значением 1, то 1; - если вторая ячейка со значением 2, то 2; - если все условия ложные , то 0.
Нехорошо, когда функция может показать разные типы данных (здесь: текст и число). Отображение ошибки ("N/A") - тоже не лучший вариант. Потом, возможно, придется обходить такую ошибку.
2 основных отличия: 1. Вы переименовали аргументы в "rRng1" и "rRng2", но тогда они не будут говорящими. Я через пол-года не вспомню что в них должно быть, поэтому прописал Кирилицей, т.к. хотел чтобы аргументы были "говорящие": 2. Добавился параметр Value. Но для меня пока загадка почему он нужен, т.к. и без него работает.
Писал об ошибке в синтаксисе ЕСЛИ: Вы не указали выход из функции (End If).
Название переменных можете поменять, но у Вас неправильно: не значение должны проверять, а диапазон. Знач1 As Long - тип переменной - целое число, но нужно же получать форматировние ячейки, а ячейка - это диапазон, тип Range И перемення должна на это как-то указывать, иначе сами потом запутаетесь. rRng1 - переменная типа Range. Можете назвать Диап1 , но тут возможны ошибки, желательно не применять кириллицу в коде. Вариант - Diap1 А вот Diap1.Value - это значение диапазона. Да, по умолчанию берется значение, но правильнее указывать явно во избежание ошибок.
В Вашем коде Cell... неправильно... семейство, поэтому Cells