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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2012, 12:02   #11
ratibor
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 42
По умолчанию

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range: Set rng = [C4:C6]
If Not Intersect(rng, Target) Is Nothing Then
    With Application
    .EnableEvents = False
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
[F:W].Replace "[*.xlsm]", "[" & [c7] & ".xlsm]"
    If [C6] = "План" Then
    [F:G].Replace "!G", "!F"
    [J:K].Replace "!K", "!J"
    [N:O].Replace "!O", "!N"
    [R:S].Replace "!S", "!R"
    [V:W].Replace "!W", "!V"
    ElseIf [C6] = "Факт" Then
    [F:G].Replace "!F", "!G"
    [J:K].Replace "!J", "!K"
    [N:O].Replace "!N", "!O"
    [R:S].Replace "!R", "!S"
    [V:W].Replace "!V", "!W"
    End If
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
    .EnableEvents = True
    End With
End If
End Sub
Теперь замена идет, когда меняется значение в ячейках С4 или С6, но не могу понять как сделать, чтобы было раздельно. Если меняется С4, то выполняется:
Код:
[F:W].Replace "[*.xlsm]", "[" & [c7] & ".xlsm]"
, а если С6, то:
Код:
If [C6] = "План" Then
    [F:G].Replace "!G", "!F"
    [J:K].Replace "!K", "!J"
    [N:O].Replace "!O", "!N"
    [R:S].Replace "!S", "!R"
    [V:W].Replace "!W", "!V"
    ElseIf [C6] = "Факт" Then
    [F:G].Replace "!F", "!G"
    [J:K].Replace "!J", "!K"
    [N:O].Replace "!N", "!O"
    [R:S].Replace "!R", "!S"
    [V:W].Replace "!V", "!W"
    End If
ratibor вне форума Ответить с цитированием
Старый 23.05.2012, 12:20   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range: Set rng = Range("C4, C6")
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(rng, Target) Is Nothing Then
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
            .Calculation = xlCalculationManual
            If Target.Address(0, 0) = "C4" Then
                [F:W].Replace "[*.xlsm]", "[" & [c7] & ".xlsm]"
            Else
                If [C6] = "План" Then
                    [F:G].Replace "!G", "!F"
                    [J:K].Replace "!K", "!J"
                    [N:O].Replace "!O", "!N"
                    [R:S].Replace "!S", "!R"
                    [V:W].Replace "!W", "!V"
                ElseIf [C6] = "Факт" Then
                    [F:G].Replace "!F", "!G"
                    [J:K].Replace "!J", "!K"
                    [N:O].Replace "!N", "!O"
                    [R:S].Replace "!R", "!S"
                    [V:W].Replace "!V", "!W"
                End If
            End If
            .Calculation = xlCalculationAutomatic
            .ScreenUpdating = True
            .EnableEvents = True
        End With
    End If
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 23.05.2012, 13:24   #13
ratibor
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 42
По умолчанию

Hugo121 Мегареспект, все работает и в два раза быстрей.
ratibor вне форума Ответить с цитированием
Старый 23.05.2012, 13:55   #14
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Только в 2?
За 12 минут?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 23.05.2012, 14:40   #15
ratibor
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Только в 2?
За 12 минут?
К сожалению, да. На маленьких таблицах отлично работает. А вот на больших... Теперь думаю как это через копирование переделать. Затык в том, как сослаться на файлы, если папку с ними перенесли в другое место?
ratibor вне форума Ответить с цитированием
Старый 23.05.2012, 15:20   #16
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

А может ну его, Replace ?
Может просто новые вставлять?
Код:
Sub Макрос3()
t = Timer
    [A1:A10000].FormulaR1C1 = "=5"
Debug.Print Format(Timer - t, "0.000000") '== 0,027344==
End Sub
RAN. вне форума Ответить с цитированием
Старый 23.05.2012, 15:54   #17
ratibor
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 42
По умолчанию

Цитата:
Сообщение от RAN. Посмотреть сообщение
А может ну его, Replace ?
Может просто новые вставлять?
Код:
Sub Макрос3()
t = Timer
    [A1:A10000].FormulaR1C1 = "=5"
Debug.Print Format(Timer - t, "0.000000") '== 0,027344==
End Sub
RAN, а можно поподробнее, что код делает?
ratibor вне форума Ответить с цитированием
Старый 23.05.2012, 16:21   #18
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

Как что?
Вставляет в 10000 ячеек столбца А формулу "=5" (другую сочинять лень было)
Время работы - 0,27 сек.
RAN. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строка формул bsa785 Microsoft Office Excel 6 28.01.2010 21:24
Сравнение формул Acharia Microsoft Office Excel 13 15.07.2009 17:33
Преобразователь формул TripleX Фриланс 6 14.04.2009 16:57
Замена кода программы с Delhi5 на Delhi7 либо замена базы данных с Acessa на MySQL DorianLeroy Фриланс 8 18.02.2009 18:52
Вывод формул Влажимир Общие вопросы Delphi 7 10.03.2008 16:21