Страницы: 1
RSS
При изменение внести значение в ячейку (VBA)
 
Доброй ночи,
Столкнулся с проблемой.
Необходимо установить расчет экселя мануально (кнопкой) т.к. расчетный файл большой и при каждом изменение нужно ждать 1-2сек.
Нужно сделать, чтобы было оповещение, что было изменение и необходимо сделать перерасчет.
В VBA вписал простой код, но выдается ошибка Out of stack space. Явно делаю что-то не так или чего-то не знаю.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Range("Changed") = 0
End Sub

т.е. дальше у меня была мысль форматированием сделать закрашивание ячейки красным если значение 0. При нажатие кнопки расчета соответственно значение будет меняться на 1.
 
Поставил проверку значение один или нет и все заработало.
Код
If Range("Changed") = 1 Then
    Range("Changed") = 0
End If

По видимому был бесконечный цикл ?
Изменено: Teklan - 26.11.2018 11:33:07
 
Не работает данный вариант если изменения вне ячейки "Changed" =(  
 
Если угадал...
Включить ручной пересчёт формул:
Код
application.Calculation=xlCalculationManual
Отключить пересчёт формулу перед сохранением:
Код
application.CalculateBeforeSave=False
включить:
Код
application.CalculateBeforeSave=True

И код следует оформлять НЕ цитатой, а при помощи кнопки:

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Чтобы было проще в приложение пример.
Мне нужно, чтобы при изменения в экселе в ячейку E10 "Changed" вносилось значение 1.
 
В модуль листа:
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.CountLarge = 1 Then
        If Not Intersect(Target, [F10]) Is Nothing Then
            With Application
                .EnableEvents = False
                [E10].Value = 1
                .EnableEvents = True
            End With
        End If
    End If
End Sub

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
Teklan написал:
Мне нужно, чтобы при изменения в экселе
В какой ячейке (ячейках) происходит изменение?
Каким способом происходит это изменение?
 
Цитата
Юрий М написал:
В какой ячейке (ячейках) происходит изменение?
хм, не думал что это важно. Подразумевалось, что в любой части Worksheet.
Но если это важно, то можно назначить диапазон. Скажем A1:Z200?
Цитата
Каким способом происходит это изменение?
В ячейке новое значение.
 
Цитата
Юрий М написал:
Каким способом происходит это изменение?
1. Значение вводится вручную.
2. Значение рассчитывается формулой.
3. Значение поступает от стороннего источника данных.
Ваш ответ
Цитата
Teklan написал:
В ячейке новое значение.
Отвечает на мой вопрос?
 
Цитата
Юрий М написал:
Отвечает на мой вопрос?
Понял. Вводится вручную.
 
Понятно. Идём дальше:
1. Изменили значение в ячейке А1 - что должно произойти?
2. СНОВА изменили значение в ячейке А1 - что должно произойти?
 
При изменение значения (вручную) в ячейке A1 должно быть вписано значение 1 в ячейку E10, что будет сигналом о том, что были введены изменения и необходим перерасчет.
При нажатие на кнопку Calculate значение в ячейке E10 будет поменяно на 0.
Дальше, если опять поменять значение в ячейке A1, то значение поменять на 1.
Изменено: Teklan - 26.11.2018 15:09:08
 
В модуль листа:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A1:Z200")) Is Nothing Then
        If Target.Address <> "$E$10" Then
            Application.EnableEvents = False
            Range("Changed") = 1
        End If
    End If
    Application.EnableEvents = True
End Sub
 
Юрий М,Большое спасибо. Именно то что нужно было.
Страницы: 1
Наверх