не нашел в форуме (скорее всего это было), наверное не смог правильно сформулировать запрос
суть в следующем
имеем длинную, растянутую "по времени" таблицу, где столбцы (или строки) имеют дату.
открывая файл или/и нажимая волшебную кнопку попадать на строку (столбец) с сегодняшней датой.
понятно дело, лучше, если сегодняшняя дата будет посередине, но это можно доработать, поставив в качестве аргумента СЕГОДНЯ-2
на всякий пожарный прилагаю файл с двумя листами для разного расположения дат
p.s. вопрос: а задача создания блока строк наподобии предыдущего блока - это вопрос для отдельной темы форума? просто, если "растягивать" (размножать) боки строк/стобцов для каждого дня стразу на весь год - это займет очень много места, а данные таковы, что их не надо помнить тогда можно было бы не искать сегодняшнюю дату (блок строк/столбцов) и просто удалять те строки/столбцы, которые старше текущего числа, например, на неделю (история на неделю может быть ещ' актуальна) и создавать (копировать) строки/столбцы (если их ещ' нет) для даты, например, на 5 дней вперед
просто конкретно моя задача может быть решена любым из способов но для форума важна не конкретная задача, а конкретные методы (или подходы) к решению. поэтому для форума это две разные темы
не нашел в форуме (скорее всего это было), наверное не смог правильно сформулировать запрос
суть в следующем
имеем длинную, растянутую "по времени" таблицу, где столбцы (или строки) имеют дату.
открывая файл или/и нажимая волшебную кнопку попадать на строку (столбец) с сегодняшней датой.
понятно дело, лучше, если сегодняшняя дата будет посередине, но это можно доработать, поставив в качестве аргумента СЕГОДНЯ-2
на всякий пожарный прилагаю файл с двумя листами для разного расположения дат
p.s. вопрос: а задача создания блока строк наподобии предыдущего блока - это вопрос для отдельной темы форума? просто, если "растягивать" (размножать) боки строк/стобцов для каждого дня стразу на весь год - это займет очень много места, а данные таковы, что их не надо помнить тогда можно было бы не искать сегодняшнюю дату (блок строк/столбцов) и просто удалять те строки/столбцы, которые старше текущего числа, например, на неделю (история на неделю может быть ещ' актуальна) и создавать (копировать) строки/столбцы (если их ещ' нет) для даты, например, на 5 дней вперед
просто конкретно моя задача может быть решена любым из способов но для форума важна не конкретная задача, а конкретные методы (или подходы) к решению. поэтому для форума это две разные темыкарандаш
Sub ert() Dim r As Range With Sheets("Лист1") Set r = Intersect(.UsedRange, .Columns(2)).Find(Date) End With If Not r Is Nothing Then Application.Goto r, 1 'With Sheets("Лист2") ' Set r = Intersect(.UsedRange, .Rows(4)).Find(Date) 'End With 'If Not r Is Nothing Then Application.Goto r, 1 End Sub
[/vba] странный момент: даты на листах возвращаются формулами, типа =GO4+1. Мне казалось, что Find не работает с формулами, но в этом примере все срабатывает. Причем только в том случае, если дата в формате "10.02.2013"; если такой формат - "10.02.13", то не находит. Почему так?
возможно, что-то вроде этого: [vba]
Код
Sub ert() Dim r As Range With Sheets("Лист1") Set r = Intersect(.UsedRange, .Columns(2)).Find(Date) End With If Not r Is Nothing Then Application.Goto r, 1 'With Sheets("Лист2") ' Set r = Intersect(.UsedRange, .Rows(4)).Find(Date) 'End With 'If Not r Is Nothing Then Application.Goto r, 1 End Sub
[/vba] странный момент: даты на листах возвращаются формулами, типа =GO4+1. Мне казалось, что Find не работает с формулами, но в этом примере все срабатывает. Причем только в том случае, если дата в формате "10.02.2013"; если такой формат - "10.02.13", то не находит. Почему так?nilem
Еще вариант. Решение частично позаимствовал. Уже не помню где, давно было. См. файл. Чтобы заметить что происходит, откройте первый раз файл с отключенными макросами. Закройте и откройте с запуском макросов.
Еще вариант. Решение частично позаимствовал. Уже не помню где, давно было. См. файл. Чтобы заметить что происходит, откройте первый раз файл с отключенными макросами. Закройте и откройте с запуском макросов.AlexM
Application.Goto упростил решение код в модуле Эта книга [vba]
Код
Private Sub Workbook_Open() With ActiveSheet Set IRange = IIf(.Name = "Лист1", .Columns(2).Cells, .Rows(4).Cells) For Each n In IRange If n.Value = Date Then Application.Goto n, 1 Next End With End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) Set IRange = IIf(Sh.Name = "Лист1", Sh.Columns(2).Cells, Sh.Rows(4).Cells) For Each n In IRange If n.Value = Date Then Application.Goto n, 1 Next End Sub
[/vba]
Application.Goto упростил решение код в модуле Эта книга [vba]
Код
Private Sub Workbook_Open() With ActiveSheet Set IRange = IIf(.Name = "Лист1", .Columns(2).Cells, .Rows(4).Cells) For Each n In IRange If n.Value = Date Then Application.Goto n, 1 Next End With End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) Set IRange = IIf(Sh.Name = "Лист1", Sh.Columns(2).Cells, Sh.Rows(4).Cells) For Each n In IRange If n.Value = Date Then Application.Goto n, 1 Next End Sub
AlexM, СУПЕР!!!! за одним небольшим исключением - у меня мой файл не работает
но он 590 кб и не уменьшается может можно куда-нибудь скинуть?
у вас присутствует имя листа может в этом дело я переименовал имя листа в "часы" - не помогло потом перименовал в "Лист3" - тоже не помогло. других имен у моего листа нет
AlexM, СУПЕР!!!! за одним небольшим исключением - у меня мой файл не работает
но он 590 кб и не уменьшается может можно куда-нибудь скинуть?
у вас присутствует имя листа может в этом дело я переименовал имя листа в "часы" - не помогло потом перименовал в "Лист3" - тоже не помогло. других имен у моего листа нет карандаш
Сообщение отредактировал карандаш - Воскресенье, 10.02.2013, 20:42
Я не возражаю, но нет технической возможности. Оставьте лист с датами или листы, если даты на нескольких. Удалите все кроме столбца или колонки с датами. Точно как делали раньше. Макрос не работает, только потому, что не те имена листов, даты расположены иначе, чем в примере.
Я не возражаю, но нет технической возможности. Оставьте лист с датами или листы, если даты на нескольких. Удалите все кроме столбца или колонки с датами. Точно как делали раньше. Макрос не работает, только потому, что не те имена листов, даты расположены иначе, чем в примере.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
AlexM, сделал на странице кнопку из рисунка назначил макрос [vba]
Код
For Each n In Sheets("часы").Columns(3).Cells If n.Value = Date Then Application.Goto n.Offset(-1, -2), 1 Next
[/vba] чтобы не только при открытии книги попадать настроку с датой СЕГОДНЯ, но и по кнопке но при нажатии попадаю на нужную строку быстро, но макрос не заканчивается и песочные часы еще некоторое время висят возможно ждут когда цикл закончится можно его прервать при попадании на нужную строку или тут дело в чем-то другом? надо, скорее всего смотреть сам файл файл 616 кб куда его можно выложить (если это вообще надо)
AlexM, сделал на странице кнопку из рисунка назначил макрос [vba]
Код
For Each n In Sheets("часы").Columns(3).Cells If n.Value = Date Then Application.Goto n.Offset(-1, -2), 1 Next
[/vba] чтобы не только при открытии книги попадать настроку с датой СЕГОДНЯ, но и по кнопке но при нажатии попадаю на нужную строку быстро, но макрос не заканчивается и песочные часы еще некоторое время висят возможно ждут когда цикл закончится можно его прервать при попадании на нужную строку или тут дело в чем-то другом? надо, скорее всего смотреть сам файл файл 616 кб куда его можно выложить (если это вообще надо)карандаш
После того как добавите : Exit Sub в два макроса можно один из них убрать. Отставляете тот что на кнопке, допустим у него имя Chasiki В "Эта книга" код правите так [vba]
После того как добавите : Exit Sub в два макроса можно один из них убрать. Отставляете тот что на кнопке, допустим у него имя Chasiki В "Эта книга" код правите так [vba]
PS. А почему вы не реагируете на ТЕМУ "удаление/копирование столбцов для сохранения диапазона"?
Alekc, прошу прощения, просто днëм сильно перегружен и могу только урывками и то, только смотреть ночью я полностью свободен (если прошлую ночь спал)))) и могу спокойно и методично пробовать и осваивать подсказки, которые мне выдали в помощь там, к сожалению, засада с этим графиком отгрузок - потребуется совет в верности выбранного метода. сегодня вечером обязательно отпишусь, потому как висит эта нерешëнная задача/проблема и меня постоянно спрашивают "доколе? когда уже наконец?!!!".
Цитата (AlexM)
PS. А почему вы не реагируете на ТЕМУ "удаление/копирование столбцов для сохранения диапазона"?
Alekc, прошу прощения, просто днëм сильно перегружен и могу только урывками и то, только смотреть ночью я полностью свободен (если прошлую ночь спал)))) и могу спокойно и методично пробовать и осваивать подсказки, которые мне выдали в помощь там, к сожалению, засада с этим графиком отгрузок - потребуется совет в верности выбранного метода. сегодня вечером обязательно отпишусь, потому как висит эта нерешëнная задача/проблема и меня постоянно спрашивают "доколе? когда уже наконец?!!!".карандаш
После того как добавите : Exit Sub в два макроса можно один из них убрать
сделал. Работает на ура.
*** прим. интересно, что перед оптимизацией с выходом из подпрогораммы макрос исполнялся мгновенно на экселе 2007 (или 2003)
после оптимизации стал работать мгновенно и в 2010 изменил время на компе на декабрь (т.е. самый конец таблицы из 2 с половиной тысяч строк - на одну дату приходится 7 строк) макрос все равно сработал мгновенно
интересно, чем он занимался до вставки Exit Sub? куда он ещë ходил?
Цитата (AlexM)
После того как добавите : Exit Sub в два макроса можно один из них убрать
сделал. Работает на ура.
*** прим. интересно, что перед оптимизацией с выходом из подпрогораммы макрос исполнялся мгновенно на экселе 2007 (или 2003)
после оптимизации стал работать мгновенно и в 2010 изменил время на компе на декабрь (т.е. самый конец таблицы из 2 с половиной тысяч строк - на одну дату приходится 7 строк) макрос все равно сработал мгновенно
интересно, чем он занимался до вставки Exit Sub? куда он ещë ходил?карандаш
Сообщение отредактировал карандаш - Вторник, 12.02.2013, 15:11
[/vba] Эта строка примерно по-русски: пробежаться по всем ячейкам столбца 3 в листе "часы" Причем, независимо от того, нашел он, что искал или не нашел, бегать будет от начала до конца. А Exit Sub обрывает эту беготню после первого истинного утверждения внутри If (в нормальной форме это выглядит так: [vba]
Код
If n.Value = Date Then Application.Goto n.Offset(-1, -2), 1 Exit Sub End if
[/vba]
[vba]
Код
For Each n In Sheets("часы").Columns(3).Cells
[/vba] Эта строка примерно по-русски: пробежаться по всем ячейкам столбца 3 в листе "часы" Причем, независимо от того, нашел он, что искал или не нашел, бегать будет от начала до конца. А Exit Sub обрывает эту беготню после первого истинного утверждения внутри If (в нормальной форме это выглядит так: [vba]
Код
If n.Value = Date Then Application.Goto n.Offset(-1, -2), 1 Exit Sub End if