Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 25.09.2008, 17:53   #1
Neo007
Пользователь
 
Регистрация: 09.09.2008
Сообщений: 43
Восклицание Макрос для обновления формул вручную только в одном листе

Файл много весит из-за большого объема анализируемых данных в листе Анализ. Это приводит к большим тормозам при работе с листом Счета. Какой макрос можно написать для листа Анализ, чтобы в нем можно было делать обновление формул вручную (например нажав кнопку: "Анализ")? А в остальных листах оставить автоматическое обновление формул.
Вложения
Тип файла: rar draft.rar (518.2 Кб, 21 просмотров)
Neo007 вне форума
Старый 25.09.2008, 21:25   #2
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Neo007 Посмотреть сообщение
Файл много весит из-за большого объема анализируемых данных в листе Анализ. Это приводит к большим тормозам при работе с листом Счета.
5 мб это большой объем? Какой у Вас процессор?
Ваш файл, на моем (2 х 2.4 GHz) выполняется за доли секунд!!!
valerij вне форума
Старый 26.09.2008, 09:31   #3
Neo007
Пользователь
 
Регистрация: 09.09.2008
Сообщений: 43
По умолчанию

У меня процессор Pentium 4 3.0 Ghz.
Просто у тебя наверное в опциях стоит ручное обновление формул. А мне нужно, чтобы это было только на одном листе.
Neo007 вне форума
Старый 26.09.2008, 09:52   #4
Neo007
Пользователь
 
Регистрация: 09.09.2008
Сообщений: 43
По умолчанию

В Excel есть параметр Сервис->Параметры->Вычисления->Вручную. Который отключает перерасчет.
Включение этого параметра в VBA

With Application
.Calculation = xlManual
End With

Как прописать, чтобы работал только для определенного листа?
Neo007 вне форума
Старый 26.09.2008, 10:27   #5
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
Смех Мои соболезнования

Цитата:
Сообщение от Neo007 Посмотреть сообщение
Как прописать, чтобы работал только для определенного листа?
Никак. Разве что обнаружится новое секретное оружие Билла Гейтса.
См. хэлп на Calculation Property, а в нём ссылку Applies To.
дмидми вне форума
Старый 26.09.2008, 15:13   #6
Neo007
Пользователь
 
Регистрация: 09.09.2008
Сообщений: 43
По умолчанию

Всего то в модуле прописать и готово:

Sub Кнопка_Анализ ()
ActiveSheet.EnableCalculation = True
ActiveSheet.EnableCalculation = False
End Sub
Neo007 вне форума
Старый 26.09.2008, 16:48   #7
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

накладка: у Neo007 по четче вариант.

при запуске книги выключи Calculation
Код:
Private Sub Workbook_Open()
    Application.Calculation = xlCalculationManual
End Sub
лови в каждом листе Change и калькулируй нужные листы кроме листа "Анализ":
для простоты создай функцию в модуле:
Код:
Function manualCalculation()
    For Each sht In Worksheets
        If sht.Name <> "Анализ" Then
            sht.calcualte
        End If
    Next sht
End Function
во все листы воткни:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    manualCalculation
End Sub
а при активации листа "Анализ" calculate его:
Код:
Private Sub Worksheet_Activate()
    worksheets("Анализ").Calculate
End Sub
попробуй так. Но хочу предупредить, такая мануальная терапия по моему может привести к не правильным пересчетам,если при изменении в 4 листе, изменения в первый лист попадают из 5, а в 5 из 3 и т.д. до 4 листа, т.е. через "пятое колено", тогда функцию manualCalculation надо будет повторить столько раз сколько у тебя "колен" в самой длинной "ноге"

Последний раз редактировалось tolikman; 26.09.2008 в 16:56.
tolikman вне форума
Старый 26.09.2008, 18:17   #8
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от tolikman Посмотреть сообщение
Но хочу предупредить, такая мануальная терапия........
А не проще сделать так(это для листа Счета, ст. D, Е, I, P, R):
Код:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
   Select Case Sh.Index
        Case 1 To 5
        With Application
        .ScreenUpdating = False
        .EnableEvents = False
        If Sh.Index = 1 Then
         With Sh.Range("D4:E65536").Cells
        If Not Intersect(Target, .Cells) Is Nothing Then
        With .Columns(1) 'Ст. D
.FormulaR1C1 = _
"=IF(RC[-1]<>"""",IF(RC[20]<>""оплачен"",IF(RC[4]="""",""-"",IF(VLOOKUP(RC[4],Инфо!R2C1:R170C4,4,FALSE)=""питание"",R1C3-RC[-1],""-"")),""-""),""-"")"
            .Value = .Value
        End With
        With .Columns(2) 'Ст. E
.FormulaR1C1 = _
"=IF(RC[-2]<>"""",IF(RC[19]<>""оплачен"",IF(RC[3]="""",""-"",IF(VLOOKUP(RC[3],Инфо!R2C1:R170C4,4,FALSE)=""питание"",""-"",R1C3-RC[-2])),""-""),""-"")"
            .Value = .Value
        End With
With .Columns(6) 'Ст. I
.FormulaR1C1 = _
"=IF(ISBLANK(RC[-1]),"""",VLOOKUP(RC[-1],Инфо!R2C1:R170C2,2,FALSE))"
            .Value = .Value
        End With
With .Columns(13) 'Ст. P
.FormulaR1C1 = _
"=IF(RC[-1]="""","""",IF(RC[-1]=""-"",""-"",IF(RC[-10]=""FM"",VLOOKUP(RC[-1],Инфо!R2C14:R46C16,3,FALSE),""-"")))"
            .Value = .Value
        End With
With .Columns(15) 'Ст. R
.FormulaR1C1 = _
"=IF(RC[-15]="""","""",IF(RC[-10]<>"""",IF(VLOOKUP(RC[-10],Инфо!R2C1:R170C4,4,FALSE)=""питание"",R1C3+15,R1C3+30),""""))"
            .Value = .Value
        End With
    End If
    End With
    End If
    .EnableEvents = True
        .ScreenUpdating = True
    End With
End Select
End Sub
Формула исчезла......
Тогда все пересчеты формул будут отдельны, по листам и параметр вычисления - автомат.

Последний раз редактировалось valerij; 27.09.2008 в 10:08.
valerij вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование *.exe вручную v01umE Общие вопросы C/C++ 4 06.07.2008 20:06
начал учить только-только - нужна ваша помошь vanDJ Помощь студентам 20 18.12.2007 21:53
Перевод формул в макрос valerij Microsoft Office Excel 2 27.11.2007 14:41
сделать так, чтобы CheckBox и CheckListBox нельзя было отмечать вручную Washington Компоненты Delphi 7 24.03.2007 16:59