Доброго дня всем! За циклился, не получается реализовать такую функцию Если в ячейках массива (А3:O35) будут любые изменения, тогда в ячейку N1 поставить сегодняшнею дату
Код
=ЕСЛИ((А3:O35)<>"";"СЕГОДНЯ";)
Доброго дня всем! За циклился, не получается реализовать такую функцию Если в ячейках массива (А3:O35) будут любые изменения, тогда в ячейку N1 поставить сегодняшнею дату
AlexM, Да работает, только не пойму- это макрос? Если да, как мне перенести его на мой основной Файл. В Макросах его не видно на ленте инструментов, То же самое в отношении предложения gling,
AlexM, Да работает, только не пойму- это макрос? Если да, как мне перенести его на мой основной Файл. В Макросах его не видно на ленте инструментов, То же самое в отношении предложения gling,rafsit61
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub Range("N1").Value = Now Range("N1").NumberFormat = "dd.mm.yyyy" & Chr(10) & "hh:mm" End Sub
[/vba]Возможно ли задать всё таки изменения только области (А3:O35), а не всего файла, потому что в этом же файле, нужно будет следить за изменениями таких же других участков?
gling, Ага, нашёл, где это зарыто[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub Range("N1").Value = Now Range("N1").NumberFormat = "dd.mm.yyyy" & Chr(10) & "hh:mm" End Sub
[/vba]Возможно ли задать всё таки изменения только области (А3:O35), а не всего файла, потому что в этом же файле, нужно будет следить за изменениями таких же других участков?rafsit61
Сообщение отредактировал Serge_007 - Суббота, 01.02.2014, 14:54
Ищите в модуле листа, на котором ваша таблица. Код в моем файле учитывает диапазон [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Range("A3:O35"), Target) Is Nothing Then Range("N1") = Date End Sub
[/vba] В него можно добавить строку как у gling. И добавить еще диапазоны. Получится так [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Range("A3:O35,T3:Z35"), Target) Is Nothing Then Range("N1") = Date End Sub
Ищите в модуле листа, на котором ваша таблица. Код в моем файле учитывает диапазон [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Range("A3:O35"), Target) Is Nothing Then Range("N1") = Date End Sub
[/vba] В него можно добавить строку как у gling. И добавить еще диапазоны. Получится так [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Range("A3:O35,T3:Z35"), Target) Is Nothing Then Range("N1") = Date End Sub
AlexM, а подскажите, плз! Как преобразовать код, чтобы это срабатывало не при ручном вводе данных в ячейки этого диапазона, а если изменения в диапазоне производятся по формуле. Уже месяц не могу решения найти, не могу никак справиться с Worksheet Calculate. Знаний недостаточно.
Цитата
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Range("A3:O35,T3:Z35"), Target) Is Nothing Then Range("N1") = Date End Sub
AlexM, а подскажите, плз! Как преобразовать код, чтобы это срабатывало не при ручном вводе данных в ячейки этого диапазона, а если изменения в диапазоне производятся по формуле. Уже месяц не могу решения найти, не могу никак справиться с Worksheet Calculate. Знаний недостаточно.
Цитата
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Range("A3:O35,T3:Z35"), Target) Is Nothing Then Range("N1") = Date End Sub
Вот мой пример. Если в диапазоне C5:C3000 в результате пересчета формул меняется значение ячейки, то происходит очистка смежных ячеек в столбцах D, E и J. затем данные сортируются.
Цитата
Private Sub Worksheet_Change(ByVal target As Range) If target.Cells.Count > 1 Then Exit Sub If Not Intersect(Range("C5:C3000"), target) Is Nothing Then Range("D5:E5,J5").ClearContents With ActiveWorkbook.Worksheets("Лист2").AutoFilter.Sort .SortFields.Clear .SortFields.Add Key:=Range("F5:F" & Range("D" & Rows.Count).End(xlUp).Row), Order:=xlAscending .SortFields.Add Key:=Range("G5:G" & Range("E" & Rows.Count).End(xlUp).Row), Order:=xlAscending .Apply End With End Sub
Этот код работает, если я вношу изменения C5:C3000 вручную. --------------------------------------------------------------------------------------
А вот я нашел и применил другой код к одной ячейке, по Workshhet Calculate. Как этот код применить к каждой ячейке с C5 по C3000 я не знаю. Не прописывать же к каждой такой код?
Цитата
Private Sub Worksheet_Calculate() Static OldVal1 As Variant, OldVal2 As Variant If Range("C5").Value <> OldVal1 Then OldVal1 = Range("C5").Value Range("D5:E5,J5").ClearContents End If End Sub
Если в ячейке C5 в результате пересчета формулы меняется значение ячейки, то происходит очистка смежных ячеек в столбцах D5, E5 и J5. Код работает, но мне бы еще сюда вставить сортировку из первого кода:
Цитата
With ActiveWorkbook.Worksheets("Лист2").AutoFilter.Sort .SortFields.Clear .SortFields.Add Key:=Range("F5:F" & Range("D" & Rows.Count).End(xlUp).Row), Order:=xlAscending .SortFields.Add Key:=Range("G5:G" & Range("E" & Rows.Count).End(xlUp).Row), Order:=xlAscending .Apply End With
Вот мой пример. Если в диапазоне C5:C3000 в результате пересчета формул меняется значение ячейки, то происходит очистка смежных ячеек в столбцах D, E и J. затем данные сортируются.
Цитата
Private Sub Worksheet_Change(ByVal target As Range) If target.Cells.Count > 1 Then Exit Sub If Not Intersect(Range("C5:C3000"), target) Is Nothing Then Range("D5:E5,J5").ClearContents With ActiveWorkbook.Worksheets("Лист2").AutoFilter.Sort .SortFields.Clear .SortFields.Add Key:=Range("F5:F" & Range("D" & Rows.Count).End(xlUp).Row), Order:=xlAscending .SortFields.Add Key:=Range("G5:G" & Range("E" & Rows.Count).End(xlUp).Row), Order:=xlAscending .Apply End With End Sub
Этот код работает, если я вношу изменения C5:C3000 вручную. --------------------------------------------------------------------------------------
А вот я нашел и применил другой код к одной ячейке, по Workshhet Calculate. Как этот код применить к каждой ячейке с C5 по C3000 я не знаю. Не прописывать же к каждой такой код?
Цитата
Private Sub Worksheet_Calculate() Static OldVal1 As Variant, OldVal2 As Variant If Range("C5").Value <> OldVal1 Then OldVal1 = Range("C5").Value Range("D5:E5,J5").ClearContents End If End Sub
Если в ячейке C5 в результате пересчета формулы меняется значение ячейки, то происходит очистка смежных ячеек в столбцах D5, E5 и J5. Код работает, но мне бы еще сюда вставить сортировку из первого кода:
Цитата
With ActiveWorkbook.Worksheets("Лист2").AutoFilter.Sort .SortFields.Clear .SortFields.Add Key:=Range("F5:F" & Range("D" & Rows.Count).End(xlUp).Row), Order:=xlAscending .SortFields.Add Key:=Range("G5:G" & Range("E" & Rows.Count).End(xlUp).Row), Order:=xlAscending .Apply End With
Есть два файла - "Инвентаризационная" и "База данных с группами123456789". В файле "База данных с группами123456789" ячейка C5 извлекает код из ячейки B17 в файле "Инвентаризационная". Моя главная задача: если в ячейке C5 в первом файле меняется код - очищаются ячейки D5, E5 и J5. И затем если D5, E5 и J5 становятся пустыми, то по коду моей сортировки они опускаются вниз.
Для наглядности того, что этот вариант работает. Меняем в ячейке B17 в файле "Инвентаризационная" номенклатурный код и видим, что файле "База данных с группами123456789" в ячейке C5 обновился код, но не очистились D5, E5 и J5. А вот если вручную сменить в ячейке C5 значение - D5, E5 и J5 очищаются и сортируются вниз.
По поводу отслеживания - поищу, спасибо!
Вот файлик.
Описание работы:
Есть два файла - "Инвентаризационная" и "База данных с группами123456789". В файле "База данных с группами123456789" ячейка C5 извлекает код из ячейки B17 в файле "Инвентаризационная". Моя главная задача: если в ячейке C5 в первом файле меняется код - очищаются ячейки D5, E5 и J5. И затем если D5, E5 и J5 становятся пустыми, то по коду моей сортировки они опускаются вниз.
Для наглядности того, что этот вариант работает. Меняем в ячейке B17 в файле "Инвентаризационная" номенклатурный код и видим, что файле "База данных с группами123456789" в ячейке C5 обновился код, но не очистились D5, E5 и J5. А вот если вручную сменить в ячейке C5 значение - D5, E5 и J5 очищаются и сортируются вниз.
У вас оказывается два файла, о чем вы написали только в последнем сообщении. После конвертирования этих файлов в формат Excel2003 ни одна формула связи с файлом "Инвентаризационная" не работает из-за отличия расширений. Постоянно запускается Макрос1 и останавливается на ошибке. Извините, я пока не знаю чем помочь.
У вас оказывается два файла, о чем вы написали только в последнем сообщении. После конвертирования этих файлов в формат Excel2003 ни одна формула связи с файлом "Инвентаризационная" не работает из-за отличия расширений. Постоянно запускается Макрос1 и останавливается на ошибке. Извините, я пока не знаю чем помочь.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Задача чуть успростилась. Необходимо, чтобы по этому коду очищался не весь диапазон столбцов, а лишь в тех строках, в которых произошел пересчет и изменение значения ячейки.
[vba]
Код
Option Explicit
Private Sub Worksheet_Calculate() Dim r As Long Application.EnableEvents = False For r = 7 To 100 If Cells(r, 3).Value <> ThreeC(r, 1) Then ThreeC(r, 1) = Cells(r, 3).Value: Cells(r, 12) = 0 Cells(r, 5).Resize(1, 2).ClearContents: Cells(r, 10).ClearContents End If Next Application.EnableEvents = True End Sub
[/vba]
Задача чуть успростилась. Необходимо, чтобы по этому коду очищался не весь диапазон столбцов, а лишь в тех строках, в которых произошел пересчет и изменение значения ячейки.
[vba]
Код
Option Explicit
Private Sub Worksheet_Calculate() Dim r As Long Application.EnableEvents = False For r = 7 To 100 If Cells(r, 3).Value <> ThreeC(r, 1) Then ThreeC(r, 1) = Cells(r, 3).Value: Cells(r, 12) = 0 Cells(r, 5).Resize(1, 2).ClearContents: Cells(r, 10).ClearContents End If Next Application.EnableEvents = True End Sub