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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2010, 18:01   #1
A-Lex-Is
Пользователь
 
Регистрация: 03.06.2010
Сообщений: 13
По умолчанию Изменение ячейки в Excel

Доброго времени суток! Требуется решить вот такую задачу.
В Excel-ком файле в столбце №19 можно выбирать значения из списка (реализовано с помощью функции "Проверка данных") Необходимо в столбец 18 вносить дату последнего изменения данных в соответствующей ячейке столбца 19. Данный лист будут использовать несколько человек, поэтому надежность очень важна. Я пробовал использовать макрос

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 19 Then Cells(Target.Row, Application.WorksheetFunction.Count A(Rows(Target.Row)) + 1) = Now
End Sub


но он не работает. Во-первых, данные вносятся в столбец расположенный правее (а не левее), а при смене знака перед единицей при повторном изменении данных в ячейке выскакивает ошибка. Прошу о помощи.
A-Lex-Is вне форума Ответить с цитированием
Старый 03.06.2010, 18:07   #2
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

файл выложите
EugeneS вне форума Ответить с цитированием
Старый 03.06.2010, 18:07   #3
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Присвоение значения ячейке - Cells(i,j).Value=...
А что вы хотите получить в Application.WorksheetFunction.Count A(Rows(Target.Row)) + 1?
motorway вне форума Ответить с цитированием
Старый 03.06.2010, 18:09   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Полагаю, вам нужно так сделать:
Код:
If Target.Column = 19 Then Cells(Target.Row, 18).Value = Now
motorway вне форума Ответить с цитированием
Старый 04.06.2010, 10:09   #5
A-Lex-Is
Пользователь
 
Регистрация: 03.06.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
Полагаю, вам нужно так сделать:
Код:
If Target.Column = 19 Then Cells(Target.Row, 18).Value = Now
Доброго времени суток! Код работает, но есть две проблемы:
1) Данное действие не должно затрагивать самую верхнюю строчку.
2) При массовом изменении ячеек (путем перетягивания ячейки со значением за правый нижний уголок) дата не выставляется.
A-Lex-Is вне форума Ответить с цитированием
Старый 04.06.2010, 10:29   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Так устроит?
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 19 Then Exit Sub
    If Not Intersect(Target, Cells(1, 19)) Is Nothing Then Exit Sub
    Target.Offset(, -1) = Now
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 04.06.2010, 10:56   #7
A-Lex-Is
Пользователь
 
Регистрация: 03.06.2010
Сообщений: 13
По умолчанию

Модифицировал, теперь первая строчка работает как надо. Но с перетаскиванием проблема по прежнему.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 19 And Target.Row <> 1 Then Cells(Target.Row, 18).Value = Now
If Target.Column = 16 And Target.Row <> 1 Then Cells(Target.Row, 17).Value = Now
End Sub
A-Lex-Is вне форума Ответить с цитированием
Старый 04.06.2010, 11:05   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Модифицировал, теперь первая строчка работает как надо. Но с перетаскиванием проблема по прежнему.
Я же Вам дал пример, в котором перетаскивание работает:
Код:
Target.Offset(, -1) = Now
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 04.06.2010, 11:15   #9
A-Lex-Is
Пользователь
 
Регистрация: 03.06.2010
Сообщений: 13
По умолчанию

Не работает.
Вот мой фрагмент. Перетаскивание должно работать в 16-м столбце.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 19 And Target.Row <> 1 Then Cells(Target.Row, 18).Value = Now
If Target.Column = 16 And Target.Row <> 1 Then Cells(Target.Row, 17).Value = Now
Target.Offset(, -1) = Now
End Sub
A-Lex-Is вне форума Ответить с цитированием
Старый 04.06.2010, 11:21   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Не работает.
И не будет работать. Правильно так:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 19 And Target.Row <> 1 Then Target.Offset(, -1) = Now
    If Target.Column = 16 And Target.Row <> 1 Then Target.Offset(, 1) = Now
End Sub
введите значение в ячейку столбца 16 и "растяните" ее. Аналогично для столбца 19, только Now будет не в правом, а в левом столбце.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение книги Excel по названию ячейки и по пути ячейки IFRSoff Microsoft Office Excel 16 07.06.2012 16:58
Выравнивание по центру ячейки в Excel Абдуллаев Рустам БД в Delphi 3 09.05.2009 23:17
Excel 2003 заблокировал ячейки... Smiley Microsoft Office Excel 1 07.04.2009 17:17
Защитить ячейки в Excel Т@тьян@ Общие вопросы Delphi 2 29.04.2008 14:47
изменение заблокированной ячейки макросом Slim Microsoft Office Excel 3 29.04.2007 13:19