Попытаюсь максимально понятно объяснить чего я хочу. Допустим мне надо получить перечень работников с 3 филиалов в котором будут указаны ФИО полностью, должность возраст и стаж работы. Я по электронке рассылаю в кадры форму, где надо заполнить соответствующие графы на листе, ну, назовем его "Форма", а на втором листе, (назовем его "Список" после нажатия на кнопку "ОК" листа "Форма" будет появлятся список. Прикладываю файл для наглядности и надеюсь на помощь. Спасибо PS. Файл примера делал в excel 2007. Когда я попытался сохранить его в формате 2003, программа начала жутко ругаться и сохранила документ без единого листа (я вложил и этот файл тоже).
Попытаюсь максимально понятно объяснить чего я хочу. Допустим мне надо получить перечень работников с 3 филиалов в котором будут указаны ФИО полностью, должность возраст и стаж работы. Я по электронке рассылаю в кадры форму, где надо заполнить соответствующие графы на листе, ну, назовем его "Форма", а на втором листе, (назовем его "Список" после нажатия на кнопку "ОК" листа "Форма" будет появлятся список. Прикладываю файл для наглядности и надеюсь на помощь. Спасибо PS. Файл примера делал в excel 2007. Когда я попытался сохранить его в формате 2003, программа начала жутко ругаться и сохранила документ без единого листа (я вложил и этот файл тоже).light26
Код написал, вот с формулами рассчёта возраста/стажа - это к специалистам. Столбцы поменял местами специально - так код короче и проще. Есть два варианта - занести их заранее или помещать макросом вместе с данными. Во втором случае нужно привязываться к переменной х и заносить формулу в строку x+1.
Код написал, вот с формулами рассчёта возраста/стажа - это к специалистам. Столбцы поменял местами специально - так код короче и проще. Есть два варианта - занести их заранее или помещать макросом вместе с данными. Во втором случае нужно привязываться к переменной х и заносить формулу в строку x+1.Hugo
Дата: Воскресенье, 06.03.2011, 21:48 |
Сообщение № 4
Группа: Гости
Hugo, ну, в принципе, вычисление возраста и стажа это не проблема, можно найти при желании. просто время на это тратить не хотел. а вот за код спасибо. Щас вот только книжку по макросам дочитаю и начну использовать :-)
Hugo, ну, в принципе, вычисление возраста и стажа это не проблема, можно найти при желании. просто время на это тратить не хотел. а вот за код спасибо. Щас вот только книжку по макросам дочитаю и начну использовать :-)Гость
тока вот в 2007 эта формула хоть и работает, но функции "=РАЗНДАТ" там нет (я хотел через справку разобраться в том как работает данная формула)
Hugo, спасибо. Сегодня смог открыть и просмотреть документ вместе с макросом. Возник вопрос:
With CreateObject("Scripting.Dictionary") For i = 1 To UBound(a) .Item(a(i, 2) & a(i, 3) & a(i, 4) & a(i, 5) & a(i, 6) & a(i, 7)) = CStr(1) мне где-то тут надо будет воткнуть формулу "=РАЗНДАТ(F2;СЕГОДНЯ();"y")", чтобы она вставлялась тоже автоматически после нажатия кнопки "ОК" ? (Я еще не ддочитал книгу))))
Serge_007, спасибо за
Quote (Serge_007)
=РАЗНДАТ(F2;СЕГОДНЯ();"y")
тока вот в 2007 эта формула хоть и работает, но функции "=РАЗНДАТ" там нет (я хотел через справку разобраться в том как работает данная формула)
Hugo, спасибо. Сегодня смог открыть и просмотреть документ вместе с макросом. Возник вопрос:
With CreateObject("Scripting.Dictionary") For i = 1 To UBound(a) .Item(a(i, 2) & a(i, 3) & a(i, 4) & a(i, 5) & a(i, 6) & a(i, 7)) = CStr(1) мне где-то тут надо будет воткнуть формулу "=РАЗНДАТ(F2;СЕГОДНЯ();"y")", чтобы она вставлялась тоже автоматически после нажатия кнопки "ОК" ? (Я еще не ддочитал книгу))))
Это недокументированная функция Excel. В справке ни одной версии Вы её не найдёте.
и за каким лядом excel так делает?
тогда объясните, пожалуйста, как она работает. Как я понимаю из текущей даты (СЕГОДНЯ()) вычитается дата указанная в ячейке f2, а оператор "у" отсекает день и месяц, оставляя только год для расчета... просто когда я попытался использовать =СЕГОДНЯ()-F2, результат вычисления меня не особо порадовал
Quote (Serge_007)
Это недокументированная функция Excel. В справке ни одной версии Вы её не найдёте.
и за каким лядом excel так делает?
тогда объясните, пожалуйста, как она работает. Как я понимаю из текущей даты (СЕГОДНЯ()) вычитается дата указанная в ячейке f2, а оператор "у" отсекает день и месяц, оставляя только год для расчета... просто когда я попытался использовать =СЕГОДНЯ()-F2, результат вычисления меня не особо порадовал
нет, не там. Dictionary используется для сравнения вводимых данных и существующих. А функцию нужно добавить в самом конце, когда заносим данные. В аттаче вариант для русского Экселя, а вот для всех: [vba]
Код
With Лист2 .Range(.Cells(2, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 7)).Value = a .Cells(x + 1, 8).Formula = "=datedif(F" & x + 1 & ",today(),""y"")" .Cells(x + 1, 9).Formula = "=datedif(G" & x + 1 & ",today(),""y"")" End With
[/vba]
Цитата (light26)
мне где-то тут
нет, не там. Dictionary используется для сравнения вводимых данных и существующих. А функцию нужно добавить в самом конце, когда заносим данные. В аттаче вариант для русского Экселя, а вот для всех: [vba]
Код
With Лист2 .Range(.Cells(2, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 7)).Value = a .Cells(x + 1, 8).Formula = "=datedif(F" & x + 1 & ",today(),""y"")" .Cells(x + 1, 9).Formula = "=datedif(G" & x + 1 & ",today(),""y"")" End With
Hugo, прошу простить мою наглость, но не могли бы Вы разложить по полочкам "работу" этого макроса, чтобы я мог самостоятельно менять его тело под другие списки? Заранее благодарю Вас.
Hugo, прошу простить мою наглость, но не могли бы Вы разложить по полочкам "работу" этого макроса, чтобы я мог самостоятельно менять его тело под другие списки? Заранее благодарю Вас.light26
Он что - не работает? Надеюсь, Hugo не осерчает за разжевывание работы макроса. В макросе 5 блоков with. 1 блок - собираем данные с листа2 в массив "a". 2 блок - на листе1 проверяем, все-ли заполнено, и если да - формируем запись "temp" 3 блок - создаем словарь с записями из данных массива "a" и проверяем, нет ли в нем записи "temp". Если такой строки нет 4 блок - заносим данные из столбца "В" листа1 в массив "а" 5 блок - выгружаем данные из массива "а" в пустую строку на листе2, туда-же добавляем формулы Напоследок Beep!
А почему так?
Quote (light26)
"работу" этого макроса
Он что - не работает? Надеюсь, Hugo не осерчает за разжевывание работы макроса. В макросе 5 блоков with. 1 блок - собираем данные с листа2 в массив "a". 2 блок - на листе1 проверяем, все-ли заполнено, и если да - формируем запись "temp" 3 блок - создаем словарь с записями из данных массива "a" и проверяем, нет ли в нем записи "temp". Если такой строки нет 4 блок - заносим данные из столбца "В" листа1 в массив "а" 5 блок - выгружаем данные из массива "а" в пустую строку на листе2, туда-же добавляем формулы Напоследок Beep!RAN
Не осерчаю Тем более, что я уже этот код забыл, и мне пришлось бы самому вычитывать код точно так же, как и RAN
Второй блок надо бы поставить первым - если MsgBox "Не всё заполнено!", то незачем массив формировать. Могу чуть пояснить детали (сам сейчас вникал) - массив a формирую из уже заполненных данных второго листа плюс одна свободная строка, куда потом дополняются данные с первого листа. Потом этот массив (что было плюс новая строка) выгружается назад на второй лист. Можно было сделать иначе, но раз уж всё равно данные брались в массив для проверки по словарю, то сделал так - дополнил и выгрузил назад, кода писать меньше
Не осерчаю Тем более, что я уже этот код забыл, и мне пришлось бы самому вычитывать код точно так же, как и RAN
Второй блок надо бы поставить первым - если MsgBox "Не всё заполнено!", то незачем массив формировать. Могу чуть пояснить детали (сам сейчас вникал) - массив a формирую из уже заполненных данных второго листа плюс одна свободная строка, куда потом дополняются данные с первого листа. Потом этот массив (что было плюс новая строка) выгружается назад на второй лист. Можно было сделать иначе, но раз уж всё равно данные брались в массив для проверки по словарю, то сделал так - дополнил и выгрузил назад, кода писать меньше Hugo
RAN, макрос-то работает. у меня голова не работает. я в макросах еще больший ноль, чем в формулах, а формул я знаю штук 10))) поэтому, если конечно не трудно, поясните мне, пожалуйста, с "разложением по полочкам" и "разжевыванием" каждого этапа. так, чтобы в последствии я мог самостоятельно менять этот макрос под свои цели. Спасибо
RAN, макрос-то работает. у меня голова не работает. я в макросах еще больший ноль, чем в формулах, а формул я знаю штук 10))) поэтому, если конечно не трудно, поясните мне, пожалуйста, с "разложением по полочкам" и "разжевыванием" каждого этапа. так, чтобы в последствии я мог самостоятельно менять этот макрос под свои цели. Спасибоlight26
Я не волшебник. Я только учусь
Сообщение отредактировал light26 - Среда, 06.07.2011, 21:44
Я вроде уже все разжевал. Что еще жевать - не знаю. Если только из титьки накормить? Но у меня нет... Могу порекомендовать немного познакомиться с VBA!
Я вроде уже все разжевал. Что еще жевать - не знаю. Если только из титьки накормить? Но у меня нет... Могу порекомендовать немного познакомиться с VBA!RAN
RAN, да пробовал я. только сам не могу: на возникающие в процессе чтения книги вопросы, отвечать некому. а вопросы эти как снежный ком набираются. в итоге вообще ниче не понятно становится. платить за курсы, у меня денег нет таких, да и е рентабельно это (в моем случае). А знакомых, знающих VBA у меня нет ((( поэтому и прошу "разложить" и "разжевать"........
RAN, да пробовал я. только сам не могу: на возникающие в процессе чтения книги вопросы, отвечать некому. а вопросы эти как снежный ком набираются. в итоге вообще ниче не понятно становится. платить за курсы, у меня денег нет таких, да и е рентабельно это (в моем случае). А знакомых, знающих VBA у меня нет ((( поэтому и прошу "разложить" и "разжевать"........light26
Берется любой макрос, ставятся точки останова, и пошагово проходим макрос. При наведении курсора выплывающая подсказка показывает значение переменной или функции.
Алгоритм работы макроса я описал. Что еще объяснять? Что означает запись a=b?
Берется любой макрос, ставятся точки останова, и пошагово проходим макрос. При наведении курсора выплывающая подсказка показывает значение переменной или функции.
Алгоритм работы макроса я описал. Что еще объяснять? Что означает запись a=b? RAN