2015-02-26 2 views
0
Function HasStrike(Rng as Range) As Boolean 
HasStrike = Rng.Font.Strikethrough 
End Function 

Я использую настраиваемую функцию, чтобы увидеть, имеет ли столбец зачеркивание. Если столбец имеет зачеркивание, он возвращает логическое значение, и я удаляю строку. Однако, я получаю ошибку #VALUE. В столбце, который я проверяю, есть только слово «МАСС». Не уверен, что происходит.#VALUE Ошибка в пользовательской функции

User Screenshot

+1

ли работа, если вы проверить одну ячейку? В каком случае это терпит неудачу? Можете ли вы показать некоторые примеры скриншотов? – Chrismas007

+0

Да, он работал раньше. Я запускаю макрос VB, который связан с логическим. – kmiao91

+0

Вы вызываете функцию в отдельной ячейке или в группе ячеек? – user3561813

ответ

0

Ваша функция будет возвращать #VALUE если содержимое ячейки перепутал форматирование: часть текста вычеркнул, а некоторые нет.

Выберите одну из «проблемных» ячеек ввода и перейдите на вкладку «Форматировать ячейки» >> Шрифт. Проверено ли «Зачеркнутое» или оно выглядит ниже? Это указывает на смешанное форматирование.

enter image description here

Попробуйте это может быть:

Function HasStrike(Rng As Range) As Boolean 
    Dim v 
    Application.Volatile '<< EDIT: added this 
    On Error Resume Next 
    v = Rng.Font.Strikethrough 
    On Error GoTo 0 
    HasStrike = v Or IsNull(v) 
End Function 
+0

Хммм - Кажется, что половина работала. Функция возвращает Boolean, но логическое значение неверно. Я получаю ложные значения для ячеек, у которых есть зачеркивания. – kmiao91

+1

Вы должны убедиться, что пересчитаете функцию - она ​​может не вызывать пересчет, если вы просто измените форматирование (или код VBA для функции), так как вы не изменили * значение * входной ячейки. Возможно, добавьте 'Application.Volatile' в верхней части функции. –