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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2009, 19:16   #1
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию Как доработать код ?

Имеется код, который работает и полностью устраивает - фиксирует время внесения данных в ячейку, но работает он только если вводить данные руками, а если данные меняются в результате вычесления то макрос не работает, а собственно это один из важных моментов.

Простая замена Worksheet_Change на Worksheet_Calculate естесвенно не работает
Private Sub Worksheet_Change (ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("C8:C100")) Is Nothing Then
With Target(1, 2)
.Value = Now
.EntireColumn.AutoFit
End With
End If
End Sub
zander вне форума Ответить с цитированием
Старый 04.03.2009, 19:35   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В случае с Worksheet_Change всё намного проще, поскольку он получает в качестве параметра изменённую ячейку (ByVal Target As Range)

Worksheet_Calculate же не сообщает, какая ячейка пересчиталась...

Остаётся одно - по каждому событию Worksheet_Calculate проверять, произошли ли интересующие Вас изменения в нужных ячейках (для этого, возможно, придётся где-то сохранять старые значения ячеек диапазона, чтобы было с чем сравнивать), и на основании этой проверки уже что-то делать.

Цитата:
а если данные меняются в результате вычесления
Вы имеете ввиду вычисления при помощи макроса, или формул?
EducatedFool вне форума Ответить с цитированием
Старый 04.03.2009, 20:05   #3
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
В случае с Worksheet_Change всё намного проще, поскольку он получает в качестве параметра изменённую ячейку (ByVal Target As Range)

Worksheet_Calculate же не сообщает, какая ячейка пересчиталась...

Остаётся одно - по каждому событию Worksheet_Calculate проверять, произошли ли интересующие Вас изменения в нужных ячейках (для этого, возможно, придётся где-то сохранять старые значения ячеек диапазона, чтобы было с чем сравнивать), и на основании этой проверки уже что-то делать.


Вы имеете ввиду вычисления при помощи макроса, или формул?
вычисления ведутся путем формул применяемых к данным получаемым по DDE. Те. по DDE получаем данные в ячейку, с помощью формул обрабатываем и в другой ячейке имеем результат. Потом цикл повторяется и результат выводится в ячейку строчкой ниже, и так далее. и в каждой из строчек хотелось бы иметь время выведения данных в каждой стрке
zander вне форума Ответить с цитированием
Старый 04.03.2009, 20:22   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Посмотрите пример кода здесь:
http://www.programmersforum.ru/showp...81&postcount=5

Ну и здесь тоже:
http://www.programmersforum.ru/showp...60&postcount=7

Должно получиться что-то вроде этого:
Код:
Private Sub Worksheet_Calculate()
    Dim shIn As Worksheet: Set shIn = ThisWorkbook.Worksheets("вход записи")
    Dim shOut As Worksheet: Set shOut = ThisWorkbook.Worksheets("КупляПродажа")

    If Me.[a1].Value >= Me.[a2].Value Then
        For i = Me.[a2].Value To Me.[a1].Value
            Me.[a2] = i
            shIn.Rows(i).Cells(11) = Now ' пишем время в 11-й столбец
        Next
    End If
    shIn.Columns(11).AutoFit
End Sub
Вложения
Тип файла: rar Книга1.rar (10.6 Кб, 57 просмотров)
EducatedFool вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нашёл код не поможете доработать его eldar Работа с сетью в Delphi 6 24.01.2010 21:27
Помогите доработать чат BakX Работа с сетью в Delphi 8 06.10.2008 19:30
Помогите Пожалуйста доработать тест!!! dimi_87 Помощь студентам 4 23.07.2008 02:07
доработать кусочек программы Алёна Помощь студентам 1 21.05.2007 13:07