Всем "Здравствуйте". Подскажите, возможно ли в экселе сделать, что бы в таблицу автоматически вставлялся новый столбец после прошествия определённой даты? Заранее спасибо.
Всем "Здравствуйте". Подскажите, возможно ли в экселе сделать, что бы в таблицу автоматически вставлялся новый столбец после прошествия определённой даты? Заранее спасибо.Новичёк
Всем ещё раз "здравствуйте". Возникла проблема со скриптом. Он каждый раз вставляет новый столбец после сохранения и открытия по-новой документа. А есть возможность это как-то исправить? Чтобы только один раз добавлялся после определённой даты? Спасибо. P.S. Файл выше в теме.
Всем ещё раз "здравствуйте". Возникла проблема со скриптом. Он каждый раз вставляет новый столбец после сохранения и открытия по-новой документа. А есть возможность это как-то исправить? Чтобы только один раз добавлялся после определённой даты? Спасибо. P.S. Файл выше в теме.Новичёк
Условие изменить, типа чтобы разность дат была 1, хотя если в нужный день не откроют, то пролёт. Тогда самое простое - завести служебную ячейку и добавить доп. условие к if.
Условие изменить, типа чтобы разность дат была 1, хотя если в нужный день не откроют, то пролёт. Тогда самое простое - завести служебную ячейку и добавить доп. условие к if.Udik
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
Сообщение отредактировал Udik - Вторник, 11.08.2015, 18:46
Новичёк, я правильно понимаю, что на каждый день Вам нужен новый столбец? Если да, то так можно [vba]
Код
Private Sub Workbook_Open() Dim existDate: existDate = Application.WorksheetFunction.CountIf(Rows(1), Date) ' If Date >= #8/1/2015# Then Лист1.Columns(3).Insert: Cells(1, 3) = Date If existDate = 0 Then Лист1.Columns(3).Insert: Cells(1, 3) = Date End Sub
[/vba]
Новичёк, я правильно понимаю, что на каждый день Вам нужен новый столбец? Если да, то так можно [vba]
Код
Private Sub Workbook_Open() Dim existDate: existDate = Application.WorksheetFunction.CountIf(Rows(1), Date) ' If Date >= #8/1/2015# Then Лист1.Columns(3).Insert: Cells(1, 3) = Date If existDate = 0 Then Лист1.Columns(3).Insert: Cells(1, 3) = Date End Sub
или чуть корректнее (вдруг, при открытии книги, активным листом будет не Лист1): [vba]
Код
Private Sub Workbook_Open() If WorksheetFunction.CountIf(Лист1.UsedRange.Rows(1), Date) Then Exit Sub Лист1.Columns(3).Insert: Лист1.Cells(1, 3) = Date End Sub
[/vba]
или чуть корректнее (вдруг, при открытии книги, активным листом будет не Лист1): [vba]
Код
Private Sub Workbook_Open() If WorksheetFunction.CountIf(Лист1.UsedRange.Rows(1), Date) Then Exit Sub Лист1.Columns(3).Insert: Лист1.Cells(1, 3) = Date End Sub
Если правильно понял то в первом приближении: [vba]
Код
Private Sub Workbook_Open() Call insCln End Sub
Public Sub insCln() Const fDone = "!" Const lName = "buff" If Sheets(lName).Cells(1, 1).Value <> fDone Then If Date >= #8/1/2015# Then Sheets(lName).Cells(1, 1).Value = fDone Sheets("Лист1").Columns(3).Insert: Cells(1, 3) = Date ThisWorkbook.Save End If End If End Sub
[/vba]
Ручками надо завести лист по имени buff, хотя если допилить макрос, можно автоматом делать. Ну и скрыть его от греха подальше.
Если правильно понял то в первом приближении: [vba]
Код
Private Sub Workbook_Open() Call insCln End Sub
Public Sub insCln() Const fDone = "!" Const lName = "buff" If Sheets(lName).Cells(1, 1).Value <> fDone Then If Date >= #8/1/2015# Then Sheets(lName).Cells(1, 1).Value = fDone Sheets("Лист1").Columns(3).Insert: Cells(1, 3) = Date ThisWorkbook.Save End If End If End Sub
[/vba]
Ручками надо завести лист по имени buff, хотя если допилить макрос, можно автоматом делать. Ну и скрыть его от греха подальше.Udik
А если мне надо добавить, что бы ещё один столбец появился после следующей даты? Попробовал вставить ещё одно условие-не работает. [vba]
Код
Option Explicit
Private Sub Workbook_Open() Call insCln End Sub
Public Sub insCln() Const fDone = "!" Const lName = "buff" If Sheets(lName).Cells(1, 1).Value <> fDone Then If Date >= #8/1/2015# Then Sheets(lName).Cells(1, 1).Value = fDone Sheets("Лист1").Columns(3).Insert: Cells(1, 3) = Date If Date >= #8/11/2015# Then Sheets(lName).Cells(1, 1).Value = fDone Sheets("Лист1").Columns(4).Insert: Cells(1, 4) = "Новый столбец" ThisWorkbook.Save End If End If End If End Sub
[/vba]
А если мне надо добавить, что бы ещё один столбец появился после следующей даты? Попробовал вставить ещё одно условие-не работает. [vba]
Код
Option Explicit
Private Sub Workbook_Open() Call insCln End Sub
Public Sub insCln() Const fDone = "!" Const lName = "buff" If Sheets(lName).Cells(1, 1).Value <> fDone Then If Date >= #8/1/2015# Then Sheets(lName).Cells(1, 1).Value = fDone Sheets("Лист1").Columns(3).Insert: Cells(1, 3) = Date If Date >= #8/11/2015# Then Sheets(lName).Cells(1, 1).Value = fDone Sheets("Лист1").Columns(4).Insert: Cells(1, 4) = "Новый столбец" ThisWorkbook.Save End If End If End If End Sub
А может, просто имеет смысл перестать придумывать свои методы хранения данных (и учить такому!) ? Сделаем обычную плоскую таблицу, необходимые выборки получим сводной, а данные по нужной дате просто будем дописывать в конец таблицы... Ну и дальше - простор фантазии для написания кода по добавлению/удалению/корректировке записей в таблице.
А может, просто имеет смысл перестать придумывать свои методы хранения данных (и учить такому!) ? Сделаем обычную плоскую таблицу, необходимые выборки получим сводной, а данные по нужной дате просто будем дописывать в конец таблицы... Ну и дальше - простор фантазии для написания кода по добавлению/удалению/корректировке записей в таблице.AndreTM
что бы ещё один столбец появился после следующей даты
Просто очистите ячейку и откройте файл заново. Или разделить макрос, собственно вставку столбца выделить в отдельную процедуру и вызывать её по мере надобности.
И чем создание отдельной таблицы (на отдельном листе) + сводная принципиально отличается от хранения данных в 1 ячейке? Изначально вопрос был в добавлении столбца макросом только и всего, а зачем это делается я не разбирался.
что бы ещё один столбец появился после следующей даты
Просто очистите ячейку и откройте файл заново. Или разделить макрос, собственно вставку столбца выделить в отдельную процедуру и вызывать её по мере надобности.
И чем создание отдельной таблицы (на отдельном листе) + сводная принципиально отличается от хранения данных в 1 ячейке? Изначально вопрос был в добавлении столбца макросом только и всего, а зачем это делается я не разбирался.Udik
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
Сообщение отредактировал Udik - Среда, 12.08.2015, 13:41
AndreTM, спасибо, конечно. Но если бы мне надо было сделать сводную, я бы сделал сводную. Я в данный момент прошу подсказать, как реализовать несколько другое решение.
AndreTM, спасибо, конечно. Но если бы мне надо было сделать сводную, я бы сделал сводную. Я в данный момент прошу подсказать, как реализовать несколько другое решение.Новичёк
Новичёк, ну тогда другое дело. Только вот зачем заставлять программу делать всё автоматически, да ещё и по неясным условиям? Ведь неизветно же, что вы подразумеваете под "определенной датой" Давайте сделаем так, что будет иметься возможность просто "добавить столбец после последнего заполненного датой столбца"...
Новичёк, ну тогда другое дело. Только вот зачем заставлять программу делать всё автоматически, да ещё и по неясным условиям? Ведь неизветно же, что вы подразумеваете под "определенной датой" Давайте сделаем так, что будет иметься возможность просто "добавить столбец после последнего заполненного датой столбца"...AndreTM
AndreTM, мне просто надо понять, как можно сделать так, как я спрашивал. Решение данного вопроса является одной из подзадач при реализации глобальной задачи. [p.s.]Определённая дата-это дата, забиваемая или в макрос или вручную в отдельной ячейке, после прошествия которой должно произойти действие в документе.
AndreTM, мне просто надо понять, как можно сделать так, как я спрашивал. Решение данного вопроса является одной из подзадач при реализации глобальной задачи. [p.s.]Определённая дата-это дата, забиваемая или в макрос или вручную в отдельной ячейке, после прошествия которой должно произойти действие в документе.Новичёк
Сообщение отредактировал Новичёк - Среда, 12.08.2015, 15:26
P.S.Определённая дата-это дата, забиваемая или в макрос или вручную в отдельной ячейке, после прошествия которой должно произойти действие в документе.
Так в том-то всё и дело! Вы смешали несколько событий, а пытаетесь реагировать на них не в комплексе, а вообще по неким третьим признакам ("давайте добавим столбец при открытии файла" ) Первое, есть некая "определенная дата", которую мы получим каким-либо методом. Вопрос: если и когда "дата" меняется, именно эта самая ваша дата в документе, а не мировое течение времени - что должно происходить? Причем "дата" может быть изменена различными способами? каким-то одним? Второе, надо добавить столбец. Допустим, у вас уже есть данные в таблице, и там написаны какие-то даты. Добавить столбец - но в какое место? В конец таблицы? где-то в середину? какую дату надо прописать в заголовок добавленного столбца? Третье, непонятен именно момент связи событий "прошествие оределенной даты" и "добавить столбец". "Прошествие даты" само по себе событие, оперирующеее минимум двумя датами - "определенной" и некоей, в нашем случае, текущей. Поэтому вам бы надо составить таблицу состояний триггеров ("дата определенная и некая дата то-то и то-то", "нужный столбец с данными есть/нет/где должен быть", что-то ещё по действиям пользователя, возможно) и определить моменты, при которых у вас должно исполняться именно добавление столбца; либо условия, при которых добавление как раз не требуется. Множественное условие у вас просто, - так вы сведите действие с моментом исполнения именно нужных условий, и никаких более... Я понимаю, что вы скажете "так я и прошу помочь мне определиться с этими условиями". Тут уж извините - недостаточность исходных данных никто не отменял. Или вы уж рассказывайте задачу поконкретнее и ближе к вашей реальности.
P.S.Определённая дата-это дата, забиваемая или в макрос или вручную в отдельной ячейке, после прошествия которой должно произойти действие в документе.
Так в том-то всё и дело! Вы смешали несколько событий, а пытаетесь реагировать на них не в комплексе, а вообще по неким третьим признакам ("давайте добавим столбец при открытии файла" ) Первое, есть некая "определенная дата", которую мы получим каким-либо методом. Вопрос: если и когда "дата" меняется, именно эта самая ваша дата в документе, а не мировое течение времени - что должно происходить? Причем "дата" может быть изменена различными способами? каким-то одним? Второе, надо добавить столбец. Допустим, у вас уже есть данные в таблице, и там написаны какие-то даты. Добавить столбец - но в какое место? В конец таблицы? где-то в середину? какую дату надо прописать в заголовок добавленного столбца? Третье, непонятен именно момент связи событий "прошествие оределенной даты" и "добавить столбец". "Прошествие даты" само по себе событие, оперирующеее минимум двумя датами - "определенной" и некоей, в нашем случае, текущей. Поэтому вам бы надо составить таблицу состояний триггеров ("дата определенная и некая дата то-то и то-то", "нужный столбец с данными есть/нет/где должен быть", что-то ещё по действиям пользователя, возможно) и определить моменты, при которых у вас должно исполняться именно добавление столбца; либо условия, при которых добавление как раз не требуется. Множественное условие у вас просто, - так вы сведите действие с моментом исполнения именно нужных условий, и никаких более... Я понимаю, что вы скажете "так я и прошу помочь мне определиться с этими условиями". Тут уж извините - недостаточность исходных данных никто не отменял. Или вы уж рассказывайте задачу поконкретнее и ближе к вашей реальности.AndreTM