Если выпадающий список основан на имени с другого листа, то в Excel старше 2007 он работать не будет
как же тогда быть с конвертацией? у меня спсок на одном листе, а данные на другом какой смысл в этой конвертации, если в 2010 работать не будет и у Алекса есть 2010? "ничего не понимаю" (с)
Цитата (Serge_007)
Если выпадающий список основан на имени с другого листа, то в Excel старше 2007 он работать не будет
как же тогда быть с конвертацией? у меня спсок на одном листе, а данные на другом какой смысл в этой конвертации, если в 2010 работать не будет и у Алекса есть 2010? "ничего не понимаю" (с)карандаш
Сообщение отредактировал карандаш - Среда, 13.02.2013, 15:38
На все вопросы ответы есть в ПРАВИЛАХ карандаш, я Вам сейчас начну замечания выносить за неоднократные их нарушения и игнорирование моих предупреждений!
Цитата (карандаш)
как же тогда быть с конвертацией?
На все вопросы ответы есть в ПРАВИЛАХ карандаш, я Вам сейчас начну замечания выносить за неоднократные их нарушения и игнорирование моих предупреждений!Serge_007
неоднократные их нарушения и игнорирование моих предупреждений!
каких именно? файл выложен в 2003 в сообщении №19 ваша реплика №20 мой вопрос в №21 ваше негодование №22 негодование на что? на вопрос? так это просто вопрос, потому как он логично вытекает из ваших же слов, что в 2007 и старше работать не будет в случае разных листов. В данном случае как раз такой случай. Поэтому я просто поинтересовался. Свои правила не навязываю, в чужой монастырь со своим Уставом не лезу, в Правилах форума ответа на возникший вопрос - как разрешить создавшуюся ситуацию - не нашëл. я опять чего-то недопонял, недочитал и что-то нарушил?
Цитата (Serge_007)
неоднократные их нарушения и игнорирование моих предупреждений!
каких именно? файл выложен в 2003 в сообщении №19 ваша реплика №20 мой вопрос в №21 ваше негодование №22 негодование на что? на вопрос? так это просто вопрос, потому как он логично вытекает из ваших же слов, что в 2007 и старше работать не будет в случае разных листов. В данном случае как раз такой случай. Поэтому я просто поинтересовался. Свои правила не навязываю, в чужой монастырь со своим Уставом не лезу, в Правилах форума ответа на возникший вопрос - как разрешить создавшуюся ситуацию - не нашëл. я опять чего-то недопонял, недочитал и что-то нарушил?карандаш
Третий и последний раз пишу: ЧИТАЙТЕ ПРАВИЛА В них есть ответы на ВСЕ Ваши вопросы Старайтесь прилагать файлы в версии Excel 2003-го офиса(xls) ЧТО ТУТ НЕПОНЯТНОГО?! ЧТО ТУТ НЕЯСНО?! КАКИЕ МОГУТ ВОЗНИКАТЬ ВОПРОСЫ О ФОРМАТЕ?! По русски, чёрным по-белому написано про формат XLS Другие форматы прикладывать НЕ НАДО! Нет в правилах рекомендаций прикладывать другие форматы! Вы же, то вообще файл не приложите, то в другом формате, то игнорируете мои просьбы всё же прочитать правила
Первое предупреждение Вам вынес Всё, оффтоп закончен
Цитата (карандаш)
негодование на что? на вопрос?
Третий и последний раз пишу: ЧИТАЙТЕ ПРАВИЛА В них есть ответы на ВСЕ Ваши вопросы Старайтесь прилагать файлы в версии Excel 2003-го офиса(xls) ЧТО ТУТ НЕПОНЯТНОГО?! ЧТО ТУТ НЕЯСНО?! КАКИЕ МОГУТ ВОЗНИКАТЬ ВОПРОСЫ О ФОРМАТЕ?! По русски, чёрным по-белому написано про формат XLS Другие форматы прикладывать НЕ НАДО! Нет в правилах рекомендаций прикладывать другие форматы! Вы же, то вообще файл не приложите, то в другом формате, то игнорируете мои просьбы всё же прочитать правила
Первое предупреждение Вам вынес Всё, оффтоп законченSerge_007
Застопорился на выпадающих списках с фильтрацией. Как сделать с фильтрацией пока не понял. Этап со сдвижкой пока не начинал. Думаю не смысла, пока нет выпадающего списка с фильтром.
Застопорился на выпадающих списках с фильтрацией. Как сделать с фильтрацией пока не понял. Этап со сдвижкой пока не начинал. Думаю не смысла, пока нет выпадающего списка с фильтром.AlexM
AlexM, да, все верно то, что сделано, работает верно СПАСИБО
но т.к. список фирм будет довольно объемный, то без фильтрации по ФИО менеджера не обойтись плюс к этому, выпадающий список необходимо сортировать по алфавиту - иначе очень трудно будет искать нужную фирму
а можно ли эту задачу решить предварительной сортировкой диапазона менеджер, ранг, фирма, примечание?
при сортировке задать условия сортировки по менеджерам, потом по фирмам и уже зная, что список всегда отсортирован (при внесении новой фирмы можно нажать на кнопку "причесать список" и отсортировать диапазон) можно основываясь на совпадении/несовпадении ячейки с предыдущей уже как-то решить задачу фильтрации по спискам?
не представляю механизма решения, поэтому просто высказал идею.
может поможет какой-нибудь вновь введ§нный вспомогательный столбец с дополнительной информацией?
AlexM, да, все верно то, что сделано, работает верно СПАСИБО
но т.к. список фирм будет довольно объемный, то без фильтрации по ФИО менеджера не обойтись плюс к этому, выпадающий список необходимо сортировать по алфавиту - иначе очень трудно будет искать нужную фирму
а можно ли эту задачу решить предварительной сортировкой диапазона менеджер, ранг, фирма, примечание?
при сортировке задать условия сортировки по менеджерам, потом по фирмам и уже зная, что список всегда отсортирован (при внесении новой фирмы можно нажать на кнопку "причесать список" и отсортировать диапазон) можно основываясь на совпадении/несовпадении ячейки с предыдущей уже как-то решить задачу фильтрации по спискам?
не представляю механизма решения, поэтому просто высказал идею.
может поможет какой-нибудь вновь введ§нный вспомогательный столбец с дополнительной информацией?карандаш
Сообщение отредактировал карандаш - Четверг, 14.02.2013, 16:01
выкладываю промежуточный файл пояснения (и вероятный способ решения) внутри возможно ли на его основе реализовать задачу смещения данных по времени (по дате)?
прим. при конвертации в 2003 эксел предупредил недопустимых потерях в чем они состоят - не знаю
выкладываю промежуточный файл пояснения (и вероятный способ решения) внутри возможно ли на его основе реализовать задачу смещения данных по времени (по дате)?
прим. при конвертации в 2003 эксел предупредил недопустимых потерях в чем они состоят - не знаюкарандаш
Связанные списки сделал 2-мя вариантами. 1-й в столбце D, 2-й в столбце H Первый формула попроще, но должна быть позадумчивей. Второй наоборот - посложнее, но пошустрее. Можно сделать комбинированный вариант или добавить еще пару имен и с ними
Связанные списки сделал 2-мя вариантами. 1-й в столбце D, 2-й в столбце H Первый формула попроще, но должна быть позадумчивей. Второй наоборот - посложнее, но пошустрее. Можно сделать комбинированный вариант или добавить еще пару имен и с ними_Boroda_
_Boroda_, предупреждение при открытии о частичной потери данных в частности пишет: [vba]
Код
Была выполнена проверка на уровне файла с последующим восстановлением файла. Некоторые фрагменты документа могли быть восстановлены либо удалены. Удаленное свойство: Проверка данных из части /xl/worksheets/sheet2.bin
[/vba]
списки работают не одинаково в этих двух столбцах заполнил список фирм побольше, чтобы было понятно выполняется ли правило сортировки (понятно, что ваших макросов там нет - файл битый скачался)
_Boroda_, предупреждение при открытии о частичной потери данных в частности пишет: [vba]
Код
Была выполнена проверка на уровне файла с последующим восстановлением файла. Некоторые фрагменты документа могли быть восстановлены либо удалены. Удаленное свойство: Проверка данных из части /xl/worksheets/sheet2.bin
[/vba]
списки работают не одинаково в этих двух столбцах заполнил список фирм побольше, чтобы было понятно выполняется ли правило сортировки (понятно, что ваших макросов там нет - файл битый скачался)карандаш
А так списки работают? Формулы от _Borodы_ еще вопрос по сдвижке блоков. Допустим во вором блоке, в котором показывается СЕГОДНЯ суббота или воскресенье. Блок должен быть пустой. Так? При открытии файла на следующий день блоки с рабочими днями должны сместится на один влево, а если сегодня суббота или воскресенье, то переместится через него. Если файл открыли через неделю, то все блоки должны быть пустыми. продумайте и подтвердите данный алгоритм.
А так списки работают? Формулы от _Borodы_ еще вопрос по сдвижке блоков. Допустим во вором блоке, в котором показывается СЕГОДНЯ суббота или воскресенье. Блок должен быть пустой. Так? При открытии файла на следующий день блоки с рабочими днями должны сместится на один влево, а если сегодня суббота или воскресенье, то переместится через него. Если файл открыли через неделю, то все блоки должны быть пустыми. продумайте и подтвердите данный алгоритм.AlexM
Допустим во вором блоке, в котором показывается СЕГОДНЯ суббота или воскресенье. Блок должен быть пустой. Так?
необязательно т.к. в субботу и воскресение никто его открывать не будет (разве что только я и то ради любопытства - как там оно себя ведет в выходные), то в принципе ничего можно не предпринимать можно просто этот блок закрасить сереньким через УФ, что будет говорить о неактуальности данных и о том, что алгоритм верно работает и сегодня действительно один из выходных дней. А перемещать можно ничего не перемещать, не анализировать.
Цитата (AlexM)
При открытии файла на следующий день блоки с рабочими днями должны сместится на один влево,
да
Цитата (AlexM)
а если сегодня суббота или воскресенье, то переместится через него.
см. первый ответ
Цитата (AlexM)
Если файл открыли через неделю, то все блоки должны быть пустыми.
да
Цитата (AlexM)
Допустим во вором блоке, в котором показывается СЕГОДНЯ суббота или воскресенье. Блок должен быть пустой. Так?
необязательно т.к. в субботу и воскресение никто его открывать не будет (разве что только я и то ради любопытства - как там оно себя ведет в выходные), то в принципе ничего можно не предпринимать можно просто этот блок закрасить сереньким через УФ, что будет говорить о неактуальности данных и о том, что алгоритм верно работает и сегодня действительно один из выходных дней. А перемещать можно ничего не перемещать, не анализировать.
Цитата (AlexM)
При открытии файла на следующий день блоки с рабочими днями должны сместится на один влево,
да
Цитата (AlexM)
а если сегодня суббота или воскресенье, то переместится через него.
см. первый ответ
Цитата (AlexM)
Если файл открыли через неделю, то все блоки должны быть пустыми.
Private Sub Workbook_Open() Application.Goto Range("A1"), 1 Grafik End Sub
[/vba] Код в Модуле1 [vba]
Код
Sub Grafik() Dim today As Date, i As Long today = Range("G1") Set today_1 = Sheets("расписание 2").Range("C4:D20") Set today0 = Sheets("расписание 2").Range("G4:H20") Set today1 = Sheets("расписание 2").Range("K4:L20") Set today2 = Sheets("расписание 2").Range("O4:P20") Set today3 = Sheets("расписание 2").Range("S4:T20") If today = Date Then Exit Sub Application.ScreenUpdating = False If Date - today > 7 Then today_1.ClearContents today0.ClearContents today1.ClearContents today2.ClearContents today3.ClearContents End If For i = 1 To Date - today If Weekday(today, 2) < 5 Then today0.Copy (today_1) today1.Copy (today0) today2.Copy (today1) today3.Copy (today2) today3.ClearContents End If If Weekday(today, 2) = 5 Then today1.Copy (today_1) today0.ClearContents End If If Weekday(today, 2) = 6 Then today0.ClearContents End If If Weekday(today, 2) = 7 Then today1.Copy (today0) today2.Copy (today1) today3.Copy (today2) today3.ClearContents End If today = today + 1 Next i Range("G1") = Date Application.ScreenUpdating = True End Sub
[/vba]
Тестировал файл не полностью, поэтому сообщите все ли работает правильно.
Посмотрите что получилось.
Код в модуле "Эта книга" [vba]
Код
Private Sub Workbook_Open() Application.Goto Range("A1"), 1 Grafik End Sub
[/vba] Код в Модуле1 [vba]
Код
Sub Grafik() Dim today As Date, i As Long today = Range("G1") Set today_1 = Sheets("расписание 2").Range("C4:D20") Set today0 = Sheets("расписание 2").Range("G4:H20") Set today1 = Sheets("расписание 2").Range("K4:L20") Set today2 = Sheets("расписание 2").Range("O4:P20") Set today3 = Sheets("расписание 2").Range("S4:T20") If today = Date Then Exit Sub Application.ScreenUpdating = False If Date - today > 7 Then today_1.ClearContents today0.ClearContents today1.ClearContents today2.ClearContents today3.ClearContents End If For i = 1 To Date - today If Weekday(today, 2) < 5 Then today0.Copy (today_1) today1.Copy (today0) today2.Copy (today1) today3.Copy (today2) today3.ClearContents End If If Weekday(today, 2) = 5 Then today1.Copy (today_1) today0.ClearContents End If If Weekday(today, 2) = 6 Then today0.ClearContents End If If Weekday(today, 2) = 7 Then today1.Copy (today0) today2.Copy (today1) today3.Copy (today2) today3.ClearContents End If today = today + 1 Next i Range("G1") = Date Application.ScreenUpdating = True End Sub
[/vba]
Тестировал файл не полностью, поэтому сообщите все ли работает правильно.AlexM
спасибо проверил, изменив дату на компе на понедельник 18.02.2013 выявились такие нюансы 1. зависимость от названия листа. (название "расписание 2" получилось случайно) можно, например, на листе с расписанием в ячейке А1 записать $$$ и закрыть еë от редактирования? (например, способом из http://www.excelworld.ru/forum/2-3638-39714-16-1360774374 [vba]
Код
Рrivate Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row <> 1 Then Exit Sub If [A1] = "Пароль" Then Exit Sub Target.Offset(1).Select End Sub
[/vba] только поменять Row <> 1 на А1<>"$$$", а [A1]="Пароль" на [A2]="$$$" тогда, если в А2 не будет указанных символов, то А1 будет недоступна, а значит изменить еë будет невозможно)
и по значению $$$ в А1 каждого листа искать лист с расписанием. Потом его имя присвоить переменной и оперировать eю, вместо прямого имени, которое может изменить пользователь
потому как программа будет находиться в общественных руках - ищи потом, через полгода, от чего она перестала работать.
2. какя-то непонятная "наследственная память" у ячеек со списками я поменял на листе "адреса" менеджеров и фирмы, но на листе "расписание" при выборе фирмы от менеджера фильтрация работает неправильно (кроме менеджера Гришина) т.к. в устройстве списков еще не разобрался, то причину указать не могу. могу только указать следствие.
3. кнопка сортировки для водителя (коммент в файле)
спасибо проверил, изменив дату на компе на понедельник 18.02.2013 выявились такие нюансы 1. зависимость от названия листа. (название "расписание 2" получилось случайно) можно, например, на листе с расписанием в ячейке А1 записать $$$ и закрыть еë от редактирования? (например, способом из http://www.excelworld.ru/forum/2-3638-39714-16-1360774374 [vba]
Код
Рrivate Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row <> 1 Then Exit Sub If [A1] = "Пароль" Then Exit Sub Target.Offset(1).Select End Sub
[/vba] только поменять Row <> 1 на А1<>"$$$", а [A1]="Пароль" на [A2]="$$$" тогда, если в А2 не будет указанных символов, то А1 будет недоступна, а значит изменить еë будет невозможно)
и по значению $$$ в А1 каждого листа искать лист с расписанием. Потом его имя присвоить переменной и оперировать eю, вместо прямого имени, которое может изменить пользователь
потому как программа будет находиться в общественных руках - ищи потом, через полгода, от чего она перестала работать.
2. какя-то непонятная "наследственная память" у ячеек со списками я поменял на листе "адреса" менеджеров и фирмы, но на листе "расписание" при выборе фирмы от менеджера фильтрация работает неправильно (кроме менеджера Гришина) т.к. в устройстве списков еще не разобрался, то причину указать не могу. могу только указать следствие.
3. кнопка сортировки для водителя (коммент в файле)карандаш
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address(0, 0) <> "A1" Then Exit Sub If [A2] = "$$$" Then Exit Sub Target.Offset(1).Select End Sub
[/vba]
Цитата (карандаш)
и по значению $$$ в А1 каждого листа искать лист с расписанием. Потом его имя присвоить переменной и оперировать им, вместо прямого имени, которое может изменить пользователь
К сожалению фразу не понял. Расписаний в книге может быть несколько? Ранее об этом вы не писали. К листам можно обращаться не только по именам, но и по индексам. Самый левый лист с индексом 1, правее с индексом 2 и т.д. Лучший вариант, когда задача описывается целиком, а потом этапами делается, а тут получается что сделали как бы ВСЕ, а это оказывается только начало. По пункту 2 Без файла, где присутствует непонятная "наследственная память" трудно что-то сказать. По пункту 3
Цитата (карандаш)
коммент в файле
Где файл?
По первому пункту. Код для защиты А1 [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address(0, 0) <> "A1" Then Exit Sub If [A2] = "$$$" Then Exit Sub Target.Offset(1).Select End Sub
[/vba]
Цитата (карандаш)
и по значению $$$ в А1 каждого листа искать лист с расписанием. Потом его имя присвоить переменной и оперировать им, вместо прямого имени, которое может изменить пользователь
К сожалению фразу не понял. Расписаний в книге может быть несколько? Ранее об этом вы не писали. К листам можно обращаться не только по именам, но и по индексам. Самый левый лист с индексом 1, правее с индексом 2 и т.д. Лучший вариант, когда задача описывается целиком, а потом этапами делается, а тут получается что сделали как бы ВСЕ, а это оказывается только начало. По пункту 2 Без файла, где присутствует непонятная "наследственная память" трудно что-то сказать. По пункту 3
AlexM, 1. по защите все понятно 2. по фразе расписание одно может меняться его расположение - листы могут передвигаться, переименовываться (первым листом я сделал лист для водителя, расписание стало вторым листом. Да и мало ли какие ещ§ изменения могут произойти, а программа должна быть к ним индиферентна) поэтому нужен способ идентификации листа с расписанием ничего лучшего я не придумал как следующий метод метим этот лист тем, что располагаем в ячейке А1 какую-нибудь запись, например $$$ (и защищаем еë от случайного стирания) теперь мы можем найти лист с расписанием как бы он ни назывался и где бы он не находился. И именно с ним работать в подпрограмме. может есть и более лучший способ сделать процедуру независимой от имени и месторасположения.
Задача описано полностью. Сделали действительно все. Просто я действительно не смог предусмотреть этих нюансов. Они вылезли на этапе тестирования.
Файл прикрепил позже, т.к. он не прикрепился с первого раза, а когда стал редактировать и переприкреплять - комп завис, пока перезагружался, пока снова прикреплял - прошло время. Возможно вы успели раньше и не видели файла.
AlexM, 1. по защите все понятно 2. по фразе расписание одно может меняться его расположение - листы могут передвигаться, переименовываться (первым листом я сделал лист для водителя, расписание стало вторым листом. Да и мало ли какие ещ§ изменения могут произойти, а программа должна быть к ним индиферентна) поэтому нужен способ идентификации листа с расписанием ничего лучшего я не придумал как следующий метод метим этот лист тем, что располагаем в ячейке А1 какую-нибудь запись, например $$$ (и защищаем еë от случайного стирания) теперь мы можем найти лист с расписанием как бы он ни назывался и где бы он не находился. И именно с ним работать в подпрограмме. может есть и более лучший способ сделать процедуру независимой от имени и месторасположения.
Задача описано полностью. Сделали действительно все. Просто я действительно не смог предусмотреть этих нюансов. Они вылезли на этапе тестирования.
Файл прикрепил позже, т.к. он не прикрепился с первого раза, а когда стал редактировать и переприкреплять - комп завис, пока перезагружался, пока снова прикреплял - прошло время. Возможно вы успели раньше и не видели файла.карандаш
Сообщение отредактировал карандаш - Суббота, 16.02.2013, 20:19
может есть и более лучший способ сделать процедуру независимой
На листе расписание всегда в ячейке G1 дата, а в G2 формула "=G1". Может быть на это сделать ориентир. Мало вероятно что в книге будут листы с точно таким расположением даты и такой формулы. Алгоритм. По событию открытия книги пробегаем по всем листам и в том где G1 с датой и G2 с формулой останавливаемся и индекс этого листа используем для кода, который уже отработан.
Цитата (карандаш)
может есть и более лучший способ сделать процедуру независимой
На листе расписание всегда в ячейке G1 дата, а в G2 формула "=G1". Может быть на это сделать ориентир. Мало вероятно что в книге будут листы с точно таким расположением даты и такой формулы. Алгоритм. По событию открытия книги пробегаем по всем листам и в том где G1 с датой и G2 с формулой останавливаемся и индекс этого листа используем для кода, который уже отработан.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
На листе расписание всегда в ячейке G1 дата, а в G2 формула "=G1". Может быть на это сделать ориентир.
ничто не мешает подвинуть их, введя допстроки наверх (например, для написания пояснений или ещ§ чего а так же ввести новые столцы слева нужна ячейка, которая никуда не денется и которая никому не нужна кроме А1 такой не найти, мне кажется
на формулу можно ориентироваться, но ведь и она может измениться со временем (врдуг что-то придется доработать) но тогда надо перебирать много ячеек на листе
тем более в ячейку А1 можно поместить и более осмысленную информацию, например то же слово "расписание" и переименовывай и переставляй лист как угодно, и сдвигай ячейки (строки/столбцы) как хочешь, и меняй алгоритм как заблагорассудится
Цитата (AlexM)
На листе расписание всегда в ячейке G1 дата, а в G2 формула "=G1". Может быть на это сделать ориентир.
ничто не мешает подвинуть их, введя допстроки наверх (например, для написания пояснений или ещ§ чего а так же ввести новые столцы слева нужна ячейка, которая никуда не денется и которая никому не нужна кроме А1 такой не найти, мне кажется
на формулу можно ориентироваться, но ведь и она может измениться со временем (врдуг что-то придется доработать) но тогда надо перебирать много ячеек на листе
тем более в ячейку А1 можно поместить и более осмысленную информацию, например то же слово "расписание" и переименовывай и переставляй лист как угодно, и сдвигай ячейки (строки/столбцы) как хочешь, и меняй алгоритм как заблагорассудитсякарандаш
Сообщение отредактировал карандаш - Суббота, 16.02.2013, 20:42
адреса править не придется вы только скажите как присвоить переменной имя листа так, чтобы потом эту переменную можно было поставить в макрос в качестве листа
я все поправлю сам
и как перебрать листы, чтобы найти нужный по содержимому ячейки А1 в общем виде просто покажите, я попробую [vba]
Код
Set today_1 = Sheets("расписание 2").Range("C4:D20")
[/vba]
[vba]
Код
Set today_1 = Sheets_1.Range("C4:D20")
[/vba]
вот переменная Sheets_1 что нужно сделать, чтобы присвоить ей найденный лист и как найти этот лист по содержимому ячейки А1?
Цитата (AlexM)
за одно и поправите адреса для поиска листа
адреса править не придется вы только скажите как присвоить переменной имя листа так, чтобы потом эту переменную можно было поставить в макрос в качестве листа
я все поправлю сам
и как перебрать листы, чтобы найти нужный по содержимому ячейки А1 в общем виде просто покажите, я попробую [vba]
Код
Set today_1 = Sheets("расписание 2").Range("C4:D20")
[/vba]
[vba]
Код
Set today_1 = Sheets_1.Range("C4:D20")
[/vba]
вот переменная Sheets_1 что нужно сделать, чтобы присвоить ей найденный лист и как найти этот лист по содержимому ячейки А1?карандаш
Сообщение отредактировал карандаш - Суббота, 16.02.2013, 20:49