Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / пользовательские функции / 9 сообщений из 9, страница 1 из 1
30.06.2006, 22:03:06
    #33825414
Antonio1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательские функции
Добрый день!
написал пользовательскую функцию, чтобы упростить контроль за ошибками (если параметры неправильные) ну и сократить текст в формулах
суть:
есть 2 сводные таблицы
а функция с помощью параметров понимает к какой обратиться и берет нужные данные, производя вычисления.
Проблема: пользовательские функции не обновляются без полного пересчета (если делаю обновление сводных таблиц через макрос), а полный пересчет - идет долго :(, порядка минуты, но это пока нету данных
т.е макрос обновляет таблицы(около секунды), и вызывает пересчет(еще минута!)
Вопрос:
можно ли как-то регулировать, какие страницы с польз.ф-ми пересчитывать, чтобы не все сразу?
или альтернативные варианты пересчетов в такой ситуации?
...
Рейтинг: 0 / 0
30.06.2006, 22:34:51
    #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
30.06.2006, 22:49:56
    #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
03.07.2006, 12:17:23
    #33827051
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательские функции
Добавьте еще в начале функции
Код: plaintext
Application.Volatile
чтоб она пересчитывалась вместе с остальными ячейками.
...
Рейтинг: 0 / 0
03.07.2006, 12:54:26
    #33827200
Antonio1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательские функции
добавлял
тогда эта вся фигня типа зацикливается - по крайней мере за 20 минут я не дождался и снял задачу...
...
Рейтинг: 0 / 0
03.07.2006, 13:37:36
    #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
03.07.2006, 17:54:17
    #33828407
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательские функции
Исправь заголовок функции на:
Код: plaintext
Function GetFullData(Data_ as Range, BDIR_ as Range, Form_ as Range , PlanFact_ as String) As Double
...
Рейтинг: 0 / 0
04.07.2006, 13:30:21
    #33829997
Antonio1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательские функции
спасибо, исправлю
подскажи еще плиз, это на что-то влияет?
в смысле на скорость, или на пересчет?
...
Рейтинг: 0 / 0
04.07.2006, 13:39:24
    #33830030
Antonio1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательские функции
Сорри, уже понял, спасибо
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / пользовательские функции / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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