1. Вопрос не по теме. 2. Для удаления строк (и столбцов) циклом надо идти в обратную сторону, т.к. при удалении номера строк/столбцов смещаются. 2a. Здесь вполне можно обойтись без Select и ActiveCell - будет быстрее.
1. Вопрос не по теме. 2. Для удаления строк (и столбцов) циклом надо идти в обратную сторону, т.к. при удалении номера строк/столбцов смещаются. 2a. Здесь вполне можно обойтись без Select и ActiveCell - будет быстрее.Hugo
Сереж, да я изначально видел, что там две страницы, потом пока читал, заинтересовался и забыл про вторую :). Чуть подправил макрос (в кои то веки!), оправил - а тут облом
Quote (Serge_007)
Михаил, жми вот эту кнопку:
Сереж, да я изначально видел, что там две страницы, потом пока читал, заинтересовался и забыл про вторую :). Чуть подправил макрос (в кои то веки!), оправил - а тут облом Michael_S
Добрый день. Помогите зафиксировать дату. Excel 2007. Таблица создана с помощью стилей, т.е. строки добавляются сами. В одном из столбцов сделан список, при выборе из списка значения "Готов" в столбце Дата должна проставляться текущая дата (в дальнейшем дата не должна меняться) В данный момент вставка даты реализована формулой ЕСЛИ, но при изменении документа дата постоянно меняется.
Добрый день. Помогите зафиксировать дату. Excel 2007. Таблица создана с помощью стилей, т.е. строки добавляются сами. В одном из столбцов сделан список, при выборе из списка значения "Готов" в столбце Дата должна проставляться текущая дата (в дальнейшем дата не должна меняться) В данный момент вставка даты реализована формулой ЕСЛИ, но при изменении документа дата постоянно меняется.Гость
это не подходит, необходимо чтобы автоматически вставлялась дата и оставалась неизменной, а по вашей ссылке предлагаются способы подразумевающие манипуляции с ячейками, в таком случае мне легче руками дату вставлять. суть проблемы - автоматизировать процесс.
это не подходит, необходимо чтобы автоматически вставлялась дата и оставалась неизменной, а по вашей ссылке предлагаются способы подразумевающие манипуляции с ячейками, в таком случае мне легче руками дату вставлять. суть проблемы - автоматизировать процесс.Гость
по одной ячейке не совсем удобно, а если выделить весь столбец и применить специальную вставку - ошибка получается: http://dl.dropbox.com/u/499514/1.jpg
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Me.UsedRange.Columns(1), Target) Is Nothing Then Exit Sub Application.EnableEvents = False If Target = "" Then Target.Next = "" Else Target.Next = Now Application.EnableEvents = True End Sub
[/vba]
Это надо вставить в модуль листа (ПКМ по ярлычку листа - Исходный текст).
Как реализовать такой функционал не только в А но еще и в G? Интересует работа одновременно в двух этих колонках.
Цитатаnilem
Если так, то вот кодец: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Me.UsedRange.Columns(1), Target) Is Nothing Then Exit Sub Application.EnableEvents = False If Target = "" Then Target.Next = "" Else Target.Next = Now Application.EnableEvents = True End Sub
[/vba]
Это надо вставить в модуль листа (ПКМ по ярлычку листа - Исходный текст).
Как реализовать такой функционал не только в А но еще и в G? Интересует работа одновременно в двух этих колонках.Гость
А кто сказал, что этот код для столбца А? Он, с таким же успехом и для G, и для АА, и для ВВ. Причем и в коде ничего менять не надо.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target(1).Column = 1 Or Target(1).Column = 7 Then Application.EnableEvents = False If Target(1) = "" Then Target.Next = "" Else Target.Next = Now Application.EnableEvents = True End If End Sub
[/vba]
А кто сказал, что этот код для столбца А? Он, с таким же успехом и для G, и для АА, и для ВВ. Причем и в коде ничего менять не надо.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target(1).Column = 1 Or Target(1).Column = 7 Then Application.EnableEvents = False If Target(1) = "" Then Target.Next = "" Else Target.Next = Now Application.EnableEvents = True End If End Sub
Дата: Понедельник, 09.12.2013, 20:09 |
Сообщение № 57
Группа: Гости
Цитатаnilem, 27.03.2011 в 15:14, в сообщении № 20[/url
]Если так, то вот кодец:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Me.UsedRange.Columns(1), Target) Is Nothing Then Exit Sub Application.EnableEvents = False If Target = "" Then Target.Next = "" Else Target.Next = Now Application.EnableEvents = True End Sub
Это надо вставить в модуль листа (ПКМ по ярлычку листа - Исходный текст).
Совершенно аналогичная задача у меня, но не смог применить волшебный код, который вы описали.
Предположим, я добавляю заказ в таблицу заказов. Есть поле, "Заказчик", которое с выпадающим списком позволяет выбирать заказчиком из списка клиентов с другой таблицы. После того, как я выбрал Закзачика, я подтвердил факт намерения добавить "новый заказ с текущей датой". Получается, в момент выбора Заказчика в поле "Дата заказа" должна проставиться сегодняшняя дата, НО, она если я открою файл завтра, то дата должна остаться вчерашней =)
Как правильно автор темы написал, некая "фиксированная дата".
Сейчас у меня в поле "Дата заказа" стоит: =ЕСЛИ(E5=""; " "; СЕГОДНЯ()) (если заказчик еще не выбран, пустота, если выбран, поставить текущую дату)
Но как вы поняли при таком подходе все даты всех заказов будут сегодняшними )
Цитатаnilem, 27.03.2011 в 15:14, в сообщении № 20[/url
]Если так, то вот кодец:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Me.UsedRange.Columns(1), Target) Is Nothing Then Exit Sub Application.EnableEvents = False If Target = "" Then Target.Next = "" Else Target.Next = Now Application.EnableEvents = True End Sub
Это надо вставить в модуль листа (ПКМ по ярлычку листа - Исходный текст).
Совершенно аналогичная задача у меня, но не смог применить волшебный код, который вы описали.
Предположим, я добавляю заказ в таблицу заказов. Есть поле, "Заказчик", которое с выпадающим списком позволяет выбирать заказчиком из списка клиентов с другой таблицы. После того, как я выбрал Закзачика, я подтвердил факт намерения добавить "новый заказ с текущей датой". Получается, в момент выбора Заказчика в поле "Дата заказа" должна проставиться сегодняшняя дата, НО, она если я открою файл завтра, то дата должна остаться вчерашней =)
Как правильно автор темы написал, некая "фиксированная дата".
Сейчас у меня в поле "Дата заказа" стоит: =ЕСЛИ(E5=""; " "; СЕГОДНЯ()) (если заказчик еще не выбран, пустота, если выбран, поставить текущую дату)
Но как вы поняли при таком подходе все даты всех заказов будут сегодняшними )vburrito
А вы попробуйте реагировать не на событие листа или книги - а, наоборот, повесить куда-нибудь кнопочку, отвечающую за я подтвердил факт намерения добавить "новый заказ с текущей датой". И именно событие нажатия этой кнопочки - должно изменить дату...
А вы попробуйте реагировать не на событие листа или книги - а, наоборот, повесить куда-нибудь кнопочку, отвечающую за я подтвердил факт намерения добавить "новый заказ с текущей датой". И именно событие нажатия этой кнопочки - должно изменить дату...AndreTM
Мне не так давно на форуме посоветовали такой вариант: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) For Each cell In Target 'проходим по всем измененным ячейкам If Not Intersect(cell, Range("A2:F65536")) Is Nothing Then With Range("G" & cell.Row) ActiveSheet.Unprotect Password:="1234" 'если ячейки защищены паролем - разблокируем их для макроса .Value = Now ActiveSheet.Protect Password:="1234" 'восстанавливаем защиту ячеек End With End If Next cell End Sub
[/vba] Диапазон ячеек выставьте какой вам требуется. Это надо вставить в модуль листа
Мне не так давно на форуме посоветовали такой вариант: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) For Each cell In Target 'проходим по всем измененным ячейкам If Not Intersect(cell, Range("A2:F65536")) Is Nothing Then With Range("G" & cell.Row) ActiveSheet.Unprotect Password:="1234" 'если ячейки защищены паролем - разблокируем их для макроса .Value = Now ActiveSheet.Protect Password:="1234" 'восстанавливаем защиту ячеек End With End If Next cell End Sub
[/vba] Диапазон ячеек выставьте какой вам требуется. Это надо вставить в модуль листаigrtsk
Инструктор по применению лосей в кавалерийских частях РККА
Сообщение отредактировал igrtsk - Вторник, 10.12.2013, 12:20
Правильно я понимаю, что этот код делает следующее: при любом изменении на листе, он пробегается по всем ячейкам в указанном диапазоне, и устанавливает в ячейку "G" текущую дату.
cell - что такое?
Что-то я вставил в свой лист, ничего не изменилось =( ничего не происходит
igrtsk спасибо!
Не могу совсем VB понять =(
Правильно я понимаю, что этот код делает следующее: при любом изменении на листе, он пробегается по всем ячейкам в указанном диапазоне, и устанавливает в ячейку "G" текущую дату.
cell - что такое?
Что-то я вставил в свой лист, ничего не изменилось =( ничего не происходитvburrito