Страницы: 1 2 След.
RSS
Автозаполнение Даты при изменении в ячейке
 
Здравствуйте
Имеется работающий код.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
For Each Cell In Target
 If Not Intersect(Cell, Range("C4:C1000")) Is Nothing Then
  With Range("E" & Cell.Row)
     .Value = Now
     .EntireColumn.AutoFit
     End With
    End If
   Next Cell
End Sub
Код вставляет дату в столбец Е при изменении в какой-либо ячейке в столбце С.
Как сделать, чтобы дата не вставлялась(не обновлялась), если в ячейку  столбца С вставляется ( "копировать-вставить") такое же значение, которое там и было?
 
Цитата
Igger написал: Как сделать,
Писать самому спец программу, если есть... целесообразность. Или заказывать в "Работе".
ps Сейчас же подход прост как палка - есть изменения - изменяем дату.
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Z,Спасибо за совет. Это так сложно, что надо обращаться в раздел "Работа"? Для понимания просто.
Изменений, то реальных нет.  Ведь вставляем то же, что там и стоит. Как сделать, чтобы не вставлялась дата при таких случаях.
Изменено: Igger - 25.12.2017 18:27:19
 
Может через процедуру ниже надо?
Код
Private Sub Worksheet_Calculate()
Изменено: Igger - 25.12.2017 18:34:39
 
Здравствуйте. Попробуйте так:
Код
Dim val

Private Sub Worksheet_Change(ByVal Target As Range)
For Each Cell In Target
 If Not Intersect(Cell, Range("C4:C1000")) Is Nothing Then
    If val = Target Then Exit Sub
  With Range("E" & Cell.Row)
     .Value = Now
     .EntireColumn.AutoFit
     End With
    End If
   Next Cell
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    val = Target
End Sub
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Михаил Лебедев,Спасибо! попробую! Извините, сейчас некогда.
 
Работает!
Но только для единичных вставок.
Надо как-то преобразовать макрос, чтобы работало при вставке нескольких ячеек одновременно.
Останавливает макрос и выделяет жёлтым  If val = Target
Изменено: Igger - 26.12.2017 00:19:30
 
Кто -нибудь поможет?  Как макрос, предложенный Михаилом, переделать, чтобы работало при вставке нескольких ячеек одновременно?

Или сделать вставку даты на пересчёт  соседней ячейки с формулой? Тогда исчезнет необходимость проверять по вставке
Изменено: Igger - 27.12.2017 00:14:01
 
Итак есть варианта.
1. Любезно предложенный Михаилом Лебедевым
Скрытый текст

Который , как нужно - не меняет дату при вставке того же самого значения, но не работает корректно при вставке нескольких ячеек одновременно(например целого столбца).

И код основанный на подсказках замечательных профессионалов с этого форума в соединении с Sub Worksheet_Changе по вставке "фамилии" в список.
Скрытый текст
Который  может менять дату одновременно при вставке нескольких ячеек, но видит ячейку , как изменённую, даже если при вставке вставляется такое же значение, как и было.

Ломаю, ломаю голову, как "объединить коды", чтобы и меняло дату при вставке одновременно нескольких ячеек, и игнорировало бы вставку нового значения, равного предыдущему. Голову сломал, хочеться добиться результата - но не по силам мне(((. Может кто даст заключение, что это невозможнщ, чтобы я плюнул бы уже на эту затею....или обнадёжил?
Изменено: Igger - 28.12.2017 01:47:24
 
А если пойти другим путём?

есть три столбца
А - значение
В - формула с просчитываемыми постоянно значениями, зависящими от А
С- требуется внести дату, когда B будет( было)  равно А - и не менять её пока А=B, а при неравенстве A и В - очищать С
Что-то такое:
Код
=ЕСЛИ(A=B;СЕГОДНЯ();" ")
Только вместо СЕГОДНЯ, надо неизменяемую дату.
Извините, что морочу голову.
Изменено: Igger - 28.12.2017 20:43:37
 
все возможно при наличии:
1. файла-примера
2. точных инструкций, как система контроля должна отреагировать на определенные действия пользователя
(т.е. банально и стандартно - нужно описание задачи. при наличии описания задачи, возможно, она имеет решение, а пока нет самой задачи - решать нечего и нет смысла надеяться на волшебное возникновение решения)
Изменено: Ігор Гончаренко - 28.12.2017 20:51:16
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
1. файла-примера
2. точных инструкций, как система контроля должна отреагировать на определенные действия пользователя
Спасибо, что откликнулись.
1.Файл примера выложил - инструкция внутри.
2. Нужно учесть, что столбец А  периодически вручную( в будущем возможно макросом) заполняется копированием значений столбца B и что на листе отслеживается обработка изменений кодом
Код
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim lReply As Long
 If Target.Cells.Count > 1 Then Exit Sub
  If Not Intersect(Target, Range("P2:P4999,Q4:Q4999")) Is Nothing Then
     If IsEmpty(Target) Then Exit Sub
       If WorksheetFunction.CountIf(Range("Игроки_клуба"), Target) = 0 Then
          lReply = MsgBox("Добавить введенное имя " & _
                         Target & " в выпадающий список?", vbYesNo + vbQuestion)
          If lReply = vbYes Then
              Range("Игроки_клуба").Cells(Range("Игроки_клуба").Rows.Count + 1, 1) = Target
          End If
       End If
     End If
End Sub


Странно, конечно, что в Excel нет возможности вставить Дату по условию. Как  Сегодня(), но не меняющуюся потом.
Изменено: Igger - 28.12.2017 21:14:18
 
Цитата
Igger написал:
=ЕСЛИ(A=B;СЕГОДНЯ();" ")
Это ж надо  8-0  Вместо СЕГОДНЯ  можно вставить любой текст,  формулу, ссылку, но нельзя просто вставить нынешнюю ДАТУ и не менять её!  :evil: Почему надо что-то изобретать !? Хоть это, может кто  объяснить доступно? Раз нет вариантов, кроме, как писать что-то новое и недоступное пониманию простого пользователя. Ну вот не  вижу в этой задаче каких-то сверхпретензий с извилистыми логическими связями и тупиками. Вижу только несовершенство Excel в данном конкретном случае.  Ну вот хоть "Дату, как текст" можно вставить?
Заранее благодарю.

P.S. Интернет засыпан такими вопросами - решения нет.
Вот люди предлагают создать функцию
Код
Public Function chislo()
chislo = Now()
End Function

Не поможет? Проверяю.
Изменено: Igger - 28.12.2017 22:02:58
 
Не помогает . Новая функция работает, как СЕГОДНЯ и всё, а надо Дату  или зафиксировать, или преобразовать в текст
Изменено: Igger - 28.12.2017 22:40:39
 
Цитата
но нельзя просто вставить нынешнюю ДАТУ и не менять её!
между "нельзя вставить" и "я не знаю как это сделать" - огромная разница, приблизительно такая же, как между
"несовершенством excel" и неумением пользоваться его возможностями
понимаете?
если я не умею пилотировать вертолет, то это не потому, что вертолет ни на что не пригодная машина, а потому что я не умею им управлять!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
и мне не нужны макросы, которые писали Вы или писали Вам
мне нужны:
Цитата
2. точных инструкций, как система контроля должна отреагировать на определенные действия пользователя
(т.е. банально и стандартно - нужно описание задачи.)
не общие слова, точные инструкции. разницу улавливаете?
и так, в колонке А изменилось 1 или несколько значений и... как на это реагировать???  
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
и так, в колонке А изменилось 1 или несколько значений и... как на это реагировать???
1.Если в колонке А изменилось одно или несколько значений :
- реакция EXEL:
Вставка текущей даты в соответстующую ячейку ( в том же ряду) колонки С, которая (Дата) меняется только при следующем изменении в соответствующей( из того же ряда) ячейке из колонки А, а не при изменении системного времени на компьютере.
2 Возможен вариант отслеживания не изменений в колонке А, а проверка равенства с соответствующим значением ячейки в колонке В(формула зависящая от А)
То есть, ЕСЛИ(A=B):
- реакция EXEL:
Вставка текущей даты в соответствующую ячейку ( в том  же ряду) колонки С, которая (Дата) меняется только   при потере равенства A=B?  а не при изменении системного времени на компьютере.
Изменено: Igger - 28.12.2017 23:14:09
 
Цитата
Ігор Гончаренко написал:
если я не умею пилотировать вертолет
Каждая система,, включая и упомянутый вами вертолёт-  совершенствуется. В том числе, и для упрощения управления.
При всём уважении к вашему профессионализму, Я остаюсь при мнении, что сложность задачи кажется(да может мне только кажется) небольшой, просто нет встроенного инструмента для реализации.
Требуется всего лишь в формулу =ЕСЛИ(A=B;СЕГОДНЯ();" ") в качестве аргумента включить вместо СЕГОДНЯ() неменяемую дату  - ну ту которую можно вставить обычными  CTRL +  ;
Изменено: Igger - 28.12.2017 23:39:18
 
см. вложение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Igger написал:
И отсутствие ответа Вами только подтверждает это
Ну вот зачем ерунду писать? Ответа нет потому, что Игоря в данный момент нет на сайте. Наберитесь терпения.
 
Цитата
Юрий М написал:
Ну вот зачем ерунду писать?
Так я не за ответ вообще. Спасибо ему( тестирую!) и Вам за участие. А за ответ на конкретный вопрос - Есть ли возможность в Excel заменить СЕГОДНЯ() на несменяемую дату CTRL + ; ?
Изменено: Igger - 28.12.2017 23:51:08
 
система реагирует на изменение* значения(й) в колонке А
если новое значение(я), вставленное в колонку А равно соотв. значению в колонке В, в колонку С пишется дата и время когда это случилось
если "А <> B" -  соотв. ячейка колонки С очищается

* что подразумевается под "изменением значения в ячейке" можно найти в технической документации по Excel
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко,Тестирую, спасибо.

1. Некорректно код реагирует на вставку или ввод такого же значения в ячейку столбца А , какое там и было.
Было 4 - вставили 4 - дата поменялась, а это неправильно для поставленной задачи.
Изменено: Igger - 29.12.2017 00:24:58
 
Цитата
Ігор Гончаренко написал:
если "А <> B" -  соотв. ячейка колонки С очищается
Это работает!
Изменено: Igger - 29.12.2017 00:20:55
 
Цитата
Было 4 - вставили 4 дата поменялась, а это неправильно для поставленной задачи.
Ваше понимание о том, что такое "изменилось значение", отличается от принятого в Excel понимания события "изменилось значение"
Цитата
все возможно при наличии:
...
2. точных инструкций, как система контроля должна отреагировать на определенные действия пользователя
(т.е. банально и стандартно - нужно описание задачи)
описываете ТОЧНЫЕ инструкции и, возможно, Вам помогут это сделать (если кому-то будет еще интересно возвращаться в тему, в которой уже 25 сообщений, а все еще идет процесс постановки задачи)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Всё по моему точно описано в первом сообщении темы. извините процитирую:
"Как сделать, чтобы дата не вставлялась(не обновлялась), если в ячейку   столбца С вставляется ( "копировать-вставить") такое же значение,  которое там и было?"
Кроме Вас этот вопрос крутило несколько человек, но ничего не получается, поэтому и много постов в теме. Поэтому я и "ругаю"  Excel,  который не предлагает функции Неменяемой Даты вместо Сегодня().
Извините,  наверное, я действительно не могу точно и понятно поставить задачу. Мне казалось, что в посте №1 и потом другой вариант в посте №10 вполне понятны.
В посте ниже на Вашу просьбу:  "1.Если в колонке А изменилось одно или несколько значений : "  К сожалению да, слово "изменилось" по разному трактуется в русском языке и в Excel. И  я теперь долго буду ругать себя за то, что не знал этого  :(
В любом случае спасибо! И мои извинения за потраченное Вами время.
Изменено: Igger - 29.12.2017 00:52:29
 
см.вложение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
а по моему всё точно описано, это когда
- в сообщении #1 описана задача
- в сообщении #2 предложено ее решение
- в сообщении #3 написано "Спасибо! все получилось"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Спасибо. В файле примере работает!
. Будем тестить в оригинале. Как я уже говорил там уже есть Worksheet_Change.
Надо смотреть, не будет ли конфликтов.
 
исправил 1 неточность.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1 2 След.
Наверх