powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / пользовательские функции
9 сообщений из 9, страница 1 из 1
пользовательские функции
    #33825414
Antonio1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
написал пользовательскую функцию, чтобы упростить контроль за ошибками (если параметры неправильные) ну и сократить текст в формулах
суть:
есть 2 сводные таблицы
а функция с помощью параметров понимает к какой обратиться и берет нужные данные, производя вычисления.
Проблема: пользовательские функции не обновляются без полного пересчета (если делаю обновление сводных таблиц через макрос), а полный пересчет - идет долго :(, порядка минуты, но это пока нету данных
т.е макрос обновляет таблицы(около секунды), и вызывает пересчет(еще минута!)
Вопрос:
можно ли как-то регулировать, какие страницы с польз.ф-ми пересчитывать, чтобы не все сразу?
или альтернативные варианты пересчетов в такой ситуации?
...
Рейтинг: 0 / 0
пользовательские функции
    #33825429
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не понял.... Объясняй еще раз с примерами.

Antonio1Проблема: пользовательские функции не обновляются без полного пересчетаЕсли речь идет о пользовательских функциях используемых на листе, то чтобы они пересчитывались автоматически функции в качестве параметра должны принимать регионы. Например так:
Код: plaintext
1.
2.
Public Function SecondSymbol(r as Range) as String
     SecondSymbol = Mid(r.Cells( 1 , 1 ).Text,  2 ,  1 )
End Function
В ячейке пишешь формулу =SecondSymbol(A1) и при изменении значения в A1 эта формула автоматически пересчитается а такая же формула в соседней ячейке ссылающаяся на A2 пересчитываться не будет.
...
Рейтинг: 0 / 0
пользовательские функции
    #33825442
Antonio1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
например вызов
=GetFullData(E$7; $B10; $D10; "P")

сам макрос

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Function GetFullData(Data_, BDIR_, Form_, PlanFact_) As Double
Dim Res As Double
Dim CurDate_ As Date
Dim TableName As String
    
    Res =  0 
    CurDate_ = Worksheets("Заставка").Cells( 1 ,  3 )
    On Error Resume Next
    
    If (PlanFact_ = "F") Or (PlanFact_ = "f") Then
        TableName = "Ф" + Trim(Str(Form_)) + "Факт"
    ElseIf (PlanFact_ = "P") Or (PlanFact_ = "p") Then
        'делим на до тек даты и после. После - из плана, до - факт
        If Data_ < CurDate_ Then
            'подставляем из таблицы факта
            TableName = "Ф" + Trim(Str(Form_)) + "Факт"
        Else
            'берем из плана
            TableName = "Ф" + Trim(Str(Form_)) + "План"
        End If
    Else
        GetFullData =  0 
        Exit Function
    End If
    'Если расходы, то Выплата-Поступление
    'Если доходы, то Поступление-Выплата
    Res = Worksheets("Служеб").PivotTables(TableName).GetData("'Выплаты_Упр' " + Format(Data_, "dd.mm.yyyy") + " " + Str(BDIR_) - _
                            Worksheets("Служеб").PivotTables(TableName).GetData("'Поступления_Упр' " + Format(Data_, "dd.mm.yyyy") + " " + Str(BDIR_)))
    
    GetFullData = Res
End Function
...
Рейтинг: 0 / 0
пользовательские функции
    #33827051
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавьте еще в начале функции
Код: plaintext
Application.Volatile
чтоб она пересчитывалась вместе с остальными ячейками.
...
Рейтинг: 0 / 0
пользовательские функции
    #33827200
Antonio1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавлял
тогда эта вся фигня типа зацикливается - по крайней мере за 20 минут я не дождался и снял задачу...
...
Рейтинг: 0 / 0
пользовательские функции
    #33827412
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonio1Проблема: пользовательские функции не обновляются без полного пересчета (если делаю обновление сводных таблиц через макрос
может там же в макросе (где вызывается пересчет сводной таблицы) поставить
Код: plaintext
Worksheets( 1 ).Range("A1").Calculate
Код: plaintext
Worksheets( 1 ).Calculate
Код: plaintext
Worksheets( 1 ).Rows( 2 ).Calculate
Код: plaintext
Worksheets("Sheet1").UsedRange.Columns("A:C").Calculate
...
Рейтинг: 0 / 0
пользовательские функции
    #33828407
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправь заголовок функции на:
Код: plaintext
Function GetFullData(Data_ as Range, BDIR_ as Range, Form_ as Range , PlanFact_ as String) As Double
...
Рейтинг: 0 / 0
пользовательские функции
    #33829997
Antonio1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, исправлю
подскажи еще плиз, это на что-то влияет?
в смысле на скорость, или на пересчет?
...
Рейтинг: 0 / 0
пользовательские функции
    #33830030
Antonio1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, уже понял, спасибо
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / пользовательские функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]