Страницы: 1
RSS
VBA. Проверка формата ячейки
 
Всем привет. Пытаюсь сделать свою функцию, одно из условий проверяет формат другой ячейки. Однако не получается правильно прописать условия...
Код
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

В принципе разные варианты пробовал, но просто только когда уже знаешь синтаксис.
Поиск ничего полезного не дал...
Изменено: G-man - 09.10.2016 11:51:37
 
Хотите получить формат ячейки, но указываете значение...
Непонятно, что хотите получить, если форматы не процентные. Если в первой ячейке 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") - тоже не лучший вариант. Потом, возможно, придется обходить такую ошибку.
 
Цитата
vikttur написал: Непонятно, что хотите получить, если форматы не процентные.
Ну, как работает функция "если" (экселевская) я знаю, я же не буду Вас грузить сотней условий. Поэтому упростил вопрос.

О замечаниях: хорошо, буду иметь ввиду.
То, что Вы скинули сверху работает. Спасибо!
 
Цитата
как работает функция "если" (экселевская) я знаю
А как работает VBA-шная, не знаете (найдите ошибку в своем коде) )
 
Цитата
А как работает VBA-шная, не знаете
2 основных отличия:
1. Вы переименовали аргументы в "rRng1" и "rRng2", но тогда они не будут говорящими. Я через пол-года не вспомню что в них должно быть, поэтому прописал Кирилицей, т.к. хотел чтобы аргументы были "говорящие":

2. Добавился параметр Value. Но для меня пока загадка почему он нужен, т.к. и без него работает.
 
Писал об ошибке в синтаксисе ЕСЛИ: Вы не указали выход из функции (End If).

Название переменных можете поменять, но у Вас неправильно: не значение должны проверять, а диапазон.
Знач1 As Long - тип переменной - целое число, но нужно же получать форматировние ячейки, а ячейка - это диапазон, тип Range
И перемення должна на это как-то указывать, иначе сами потом запутаетесь.
rRng1 - переменная типа Range. Можете назвать Диап1 , но тут возможны ошибки, желательно не применять кириллицу в коде. Вариант - Diap1
А вот Diap1.Value - это значение диапазона. Да, по умолчанию берется значение, но правильнее указывать явно во избежание ошибок.

В Вашем коде Cell... неправильно... семейство, поэтому Cells
Страницы: 1
Читают тему
Наверх