Здравствуйте! В соседней теме мне показали, как написать функцию ЕСЛИОШИБКА для Excel 2003, за что огромное спасибо однако возник следующий вопрос: если документ, в который я вставил функцию, открывается в excel 2003 то всё нормально, а если в более новом, то при открытии выдаётся сообщение об ошибке (из-за конфликта названий пользовательской функции со стандартной). Есть ли возможность делать функцию неактивной чтобы избежать такого конфликта? Тогда я бы проверил версию при открытии файла и в 2003 оставил всё как есть, а в 2007 и выше выключил бы пользовательскую, чтобы осталась стандартная. Спасибо!
Здравствуйте! В соседней теме мне показали, как написать функцию ЕСЛИОШИБКА для Excel 2003, за что огромное спасибо однако возник следующий вопрос: если документ, в который я вставил функцию, открывается в excel 2003 то всё нормально, а если в более новом, то при открытии выдаётся сообщение об ошибке (из-за конфликта названий пользовательской функции со стандартной). Есть ли возможность делать функцию неактивной чтобы избежать такого конфликта? Тогда я бы проверил версию при открытии файла и в 2003 оставил всё как есть, а в 2007 и выше выключил бы пользовательскую, чтобы осталась стандартная. Спасибо!vzdorny
#If VBA7 <> 1 Then Function ЕСЛИОШИБКА(ByVal проверяемое_значение As Variant, ByVal значение_если_ошибка As Variant) As Variant Dim i As Long, j As Long If IsArray(проверяемое_значение) Then On Error Resume Next j = UBound(проверяемое_значение, 2) If Err Then Err.Clear For i = 1 To UBound(проверяемое_значение) If IsError(проверяемое_значение(i)) Then проверяемое_значение(i) = значение_если_ошибка Next Else For i = 1 To UBound(проверяемое_значение) For j = 1 To UBound(проверяемое_значение, 2) If IsError(проверяемое_значение(i, j)) Then проверяемое_значение(i, j) = значение_если_ошибка Next Next End If Else If IsError(проверяемое_значение) Then проверяемое_значение = значение_если_ошибка End If ЕСЛИОШИБКА = проверяемое_значение End Function #End If
[/vba] + xlm функция-обертка _xlfn.IFERROR на листе макросов [vba]
#If VBA7 <> 1 Then Function ЕСЛИОШИБКА(ByVal проверяемое_значение As Variant, ByVal значение_если_ошибка As Variant) As Variant Dim i As Long, j As Long If IsArray(проверяемое_значение) Then On Error Resume Next j = UBound(проверяемое_значение, 2) If Err Then Err.Clear For i = 1 To UBound(проверяемое_значение) If IsError(проверяемое_значение(i)) Then проверяемое_значение(i) = значение_если_ошибка Next Else For i = 1 To UBound(проверяемое_значение) For j = 1 To UBound(проверяемое_значение, 2) If IsError(проверяемое_значение(i, j)) Then проверяемое_значение(i, j) = значение_если_ошибка Next Next End If Else If IsError(проверяемое_значение) Then проверяемое_значение = значение_если_ошибка End If ЕСЛИОШИБКА = проверяемое_значение End Function #End If
[/vba] + xlm функция-обертка _xlfn.IFERROR на листе макросов [vba]