Страницы: 1
RSS
Excel 2003: функции из более новых версий на VBA
 
Здравствуйте!
По ряду причин нужна совместимость файлов с Excel 2003, но в нём нет ряда полезных функций,
как например ЕСЛИОШИБКА, СЛУЧМЕЖДУ, СЧЕТЕСЛИМН и некоторых других.
В то же время, есть возможность написания пользовательских функций на VBA.
Не пытался ли кто-нибудь добавлять эти функции вручную?..
Спасибо!
Wo unrecht zu recht wird ist widerstand pflicht.
 
Цитата
mo8 написал: например ЕСЛИОШИБКА
Код
Function ЕСЛИ_ОШИБКА(значение, значение_если_ошибка)
    If IsError(значение) Then
        ЕСЛИ_ОШИБКА = значение_если_ошибка
    Else
        ЕСЛИ_ОШИБКА = значение
    End If
End Function
Изменено: Sanja - 21.11.2018 09:04:39
Согласие есть продукт при полном непротивлении сторон
 
del опередили

Хотя
Код
Function iferror(ByVal Value, Optional ByVal AltValue)
If IsError(Value) Then
    iferror = AltValue
Else
    iferror = Value
End If
End Function
только вот как вы будете с локализацие бороться?
Изменено: БМВ - 21.11.2018 09:08:27
По вопросам из тем форума, личку не читаю.
 
Цитата
mo8 написал: СЛУЧМЕЖДУ
Код
Function СЛУЧ_МЕЖДУ(нижн_граница, верх_граница)
    Randomize
    СЛУЧ_МЕЖДУ = Int((верх_граница - нижн_граница + 1) * Rnd + нижн_граница)
End Function
Изменено: Sanja - 21.11.2018 09:33:51
Согласие есть продукт при полном непротивлении сторон
 
Sanja, а rnd встряхнуть?
По вопросам из тем форума, личку не читаю.
 
Встряхнул. См. выше
Согласие есть продукт при полном непротивлении сторон
 
Цитата
mo8 написал: СЧЕТЕСЛИМН
Не совсем, но переработать не сложно. Подсчет УНИКАЛЬНЫХ значений по нескольким условиям
Код
Function СЧЕТУНИКЕСЛИМН(rngU As Range, ParamArray Conditions()) As Long
'rngU - диапазон поиска уникальных значений, обязательный
'Conditions() - массив ПАР значений вида: Диапазон_Условий1;Условие1;Диапазон_Условий2;Условие2...Диапазон_УсловийN;УсловиеN, обязательный
'               должен иметь хотя-бы одну пару значений.
'Все диапазоны должны состоять из одного столбца и иметь равное кол-во строк
Dim cl()
Dim arrFlag() As Boolean
Dim I&, J&
Dim rngCond()
On Error Resume Next
cl = rngU.Value
With CreateObject("Scripting.Dictionary")
    For I = 1 To UBound(cl)
        ReDim arrFlag(Int(UBound(Conditions) / 2))
        For J = LBound(Conditions) To UBound(Conditions) Step 2
            If IsObject(Conditions(J)) Then rngCond = Conditions(J).Value
            If IsNumeric(rngCond(I, 1)) Then
                If Application.Evaluate(Replace(rngCond(I, 1), ",", ".") & Conditions(J + 1)) Then arrFlag(Int(J / 2)) = True
            Else
                If rngCond(I, 1) Like Conditions(J + 1) Then arrFlag(Int(J / 2)) = True
            End If
        Next
        If WorksheetFunction.And(arrFlag) = True Then
            .Add CStr(cl(I, 1)), cl(I, 1)
            If Err = 0 Then
                СЧЕТУНИКЕСЛИМН = СЧЕТУНИКЕСЛИМН + 1
            Else
                Err.Clear
            End If
        End If
    Next
End With
End Function
Согласие есть продукт при полном непротивлении сторон
 
Цитата
mo8 написал:
нужна совместимость файлов с Excel 2003
Есть специальный пакет, который накатывается на этот самый 2003 и в нем появляются эти функции. Можно поискать в сети по ключевым словам: "пакет совместимости excel FileFormatConverters.exe"
Вот вроде пока рабочая ссылка с офф.сайта: https://www.microsoft.com/en-US/Download/details.aspx?id=33298
Для успешной работы пакета совместимости нужно предварительно установить последние обновления для MS Office 2003.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, Дмитрий, мне кажется Вы ошибаетесь, но могу ошибаться и я. Помнится что это именно пакет совместимости формата файла, и этот пакет позволял читать файлы X. Но вот новые функции продолжали оставаться недоступными. Если правильно помню, то и ограничения менялись, но не соответствовали новым, строк на листе становилось не миллион в 2003, несмотря на новый формат файла.
По вопросам из тем форума, личку не читаю.
 
БМВ, точно, спасибо. Действительно, этот пакет позволяет лишь открывать, изменять и сохранять файлы в новых форматах, но функции новые не появятся. Запамятовал эту фишку(на 2007 перешел сразу же после выхода, поэтому этот пакет совместимости не особо пользовать пришлось лично).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
mo8 написал:
По ряду причин нужна совместимость файлов с Excel 2003
может, есть смысл устранить етот ряд причин методом перехода на 2007 или 2010?
как ни как уже прошло 15 лет.
 
Цитата
ivanok_v2: как ни как уже прошло 15 лет
вот да)))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
ivanok_v2 написал: может, есть смысл устранить етот ряд причин методом перехода на
... 2016 - не облачный, т.к. 2019, по оценкам, - это лишь некоторый "макияж" предшественника... ;)
Изменено: Z - 21.11.2018 18:23:47
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
этот пакет позволяет лишь открывать, изменять и сохранять файлы в новых форматах
На мой взгляд, пакет позволяет только открывать в Excel 2003 файлы в новых форматах, но сохраняет в .xls
 
Цитата
Kuzmich написал:
но сохраняет в .xls
вот как раз нет. Он позволяет сохранять в новых форматах. Но как уже отметили выше - доступа к новому функционалу нет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
вот как раз нет. Он позволяет сохранять в новых форматах.
Дмитрий, файл с расширением .xlsx в Excel 2003 открывается при помощи конвертера (если установлен пакет совместимости) в режиме только чтение.
И как мне его потом сохранить в новом формате? Я что-то не понимаю. В меню Сохранить как... какой выбрать тип файла?
Страницы: 1
Наверх