{quote}{login=vitendo}{date=14.01.2012 06:37}{thema=}{post}Спасибо большое. Вариант от 14.01.2012, 17:30 хорошо работает.
А вот в варианте от 14.01.2012, 17:38 интересная ошибка получается. Почему-то к числу ещё 4 прибавляется. Например вводишь 12, получается 16.05.12{/post}{/quote}
Понял в чём проблема. У меня в ячейке Н1 стояло 5 число (05.05.2012). А формула считает от числа (Target = Target + [h1] - 1). Вот и получалось что число считалось как: введённое значение + число из Н1 - 1 (12 + 5 - 1 = 16).
Обнаружил интересный глюк у этого макроса. Захотел удалить неправильно проставленную дату. Выделил ячейку и нажал "Delete". В итоге получил не пустую ячейку, а дату предыдущую месяцу указаной мной в ячейке H1. У меня там стоит "Май 2012", после "удаления" :) вижу 30.04.12. Пробовал удалить при редактировании в поле ввода формул, результат тот же - невозможно удалить, можно только редактировать.
{quote}{login=KukLP}{date=14.01.2012 02:49}{thema=}{post}>> Хоть так, хоть уже с макросами. Прям слезы жалости к Вам. Мож не стоит поступатся своими идейными убеждениями? Вводите все руками, будьте принципиальным:-) По теме, в модуль листа: Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, [b4:b34]) Is Nothing Then Exit Sub If Not IsNumeric(Target) Then Exit Sub If Target > 31 Then Exit Sub Target = DateSerial(Year([h1]), Month([h1]), Target) Target.NumberFormat = "dd/mm/yy" End Sub{/post}{/quote} Добавил в модуль листа (ярлык листа - Исходный текст - Лист1) ваш макрос. Сохранил файл в формате с поддержкой макросов .xlsm ка того потребовала программа. И ничего. Как добавляло январь 1900 г. (.01.00), так и добавляет. Может что не так написал? Файл прилагается.
Теперь не по вопросу. Принципами своими не поступаюсь. Попробовал все знакомые мне способы в работе с формулами, форматированием и автозаменой. Пришёл к выводу что это реализуемо только при помощи макроса. Однако, как всегда, теплится надежда что что-то упустил и есть шанс что у кого-то могут быть ещё идеи решения вопроса без макроса.
Уважаемые гуру, подскажите пожалуйста решение казалось бы тривиальной задачи.
Я ввожу построчно данные с датами. Причём даты нужно вводить в формате (14.01.12). При этом есть дата (введено "01.01.2012", а отображается как "Январь 2012") в одной ячейке в верхней части листа.
Так вот, приходится постоянно вводить в каждую новую строку полную дату. Excel конечно помогает, если вводить число и месяц (например, 13.01), то год он ставит сам (получается 13.01.12, согласно формату ячейки). Но есть в этом какая-то несправедливость жизни, видеть постоянно перед самым носом месяц и год, однако постоянно его вводить. И снова, и снова...
Хочется облегчить и ускорить процесс. Хочется чтобы вводил только 1-2 цифры дней даты, и после нажатия на кнопку "Ввод" к введённым нами дням добавлялся месяц и год из той ячейки с датой в верху листа, которая перед самым носом :)
Легко сделать при помощи формулы так, чтобы число вбил в одну ячейку, а желаемый результат получился в ячейке с формулой: ЕСЛИ(B13="";"";ПСТР(ТЕКСТ(B13;"00");1;2)&"."&ТЕКСТ($H$1;"ММ")&"."&ТЕКСТ($H$1;"ГГ")) где: B13 - ячейка с введённым числом; $H$1 - ячейка с датой.
Но мне то нужно, чтобы замена происходила в той же ячейке. Т.е. ввёл число (например, 14), нажал на "Enter" и оп-ля, а там уже полная дата в формате ДД.ММ.ГГ (например, 14.01.12).
Сделал небольшой примерчик с диапазоном в 30 строк и колонкой дата. В нём будет более наглядно видно что нужно. Хотелось бы решить этот вопрос без использования макросов. Но что я только не придумывал - ничего не получается.
Может у кого есть какие либо советы. Хоть так, хоть уже с макросами.
{quote}{login=RAN}{date=06.05.2011 06:24}{thema=}{post}Попробуйте найти в вашем коде что-нибудь похожее If NextRow <> Sheets("база").Cells(Rows.Count, 1).End(xlUp).Row + 1 Then Exit Sub{/post}{/quote}
Нет такой строки нет. В блоке кнопки "Добавить" есть только код определения пустой строки, для показа её при открытии формы ввода в первый раз: NextRow = Application.WorksheetFunction.CountA(Range("A:A")) + 1
Попытка подставить вашу строчку приводит к тому, что вообще ничего не добавляется, не зависимо от того, стою я на заполненной строке или на пустой.
Действительно, меня удивила возможность не добавлять ту же строку, на которой я стою, если в неё не добавлено ни одного изменения. Наверное это можно как-то реализовать, но не знаю как. И не понял как это сделано у вас. По поводу ответа "Достаточно убрать из кода все лишнее", то я беспокоюсь что с лишним я уберу и нужное. Наверное можно как-то сделать и без уборки?
to
Для реализации проверки на повторение, можно не искать по нескольким полям, так как в первом столбце (TIN) пишутся идентификационные кода (они уникальны для всех жителей страны). Достаточно проверки только по одному столбцу. Наверное это не отожрёт много памяти. Вот я и искал такой код у RAN, но кроме определения пустой ячейки, там ничего нет. Так и хочется сказать словами молодого Задорнова: - "Не понимаю!"
{quote}{login=RAN}{date=06.05.2011 09:26}{thema=Re: }{post}{quote}{login=vitendo}{date=06.05.2011 02:00}{thema=}{post}Но, гложет меня одна не завершённая проблема. Никак не могу понять как RAN (у которого я позаимствовал много идей, за что и признателен) сделал чтобы у него не дублировались записи, при вводе новых. Может кто подскажет, как в моём варианте (хорошо отработанном и отшлифованным уважаемым Hugo) сделать тоже самое.
Заранее благодарен за любые советы.{/post}{/quote}
Достаточно убрать из кода все лишнее.{/post}{/quote}
Я совершенно согласен. Но проще, как писал Юрий М, переписать всё заново. Это получилась моя учебная форма, в которую свалено всё. Начиная от разнообразия стилей кодов, заканчивая разнообразием подходов к программированию, вообще.
При написании следующей, постараюсь сделать всё слажено. Но сейчас мне главное разобраться что и как делается.
{quote}{login=Hugo}{date=06.05.2011 09:24}{thema=}{post}В каком файле у RAN не дублируются? Я одну версию проверил - даёт продублировать запись.{/post}{/quote}
Это был один из вариантов RAN под именем вложенного файла "post_223191.rar"
Добрый вечер. Это опять я. Довёл свою таблицу до логического завершения. Решил что с конвертацией в .dbf начну заниматься после небольшого перерыва, тогда голова посвежее станет :) Но, гложет меня одна не завершённая проблема. Никак не могу понять как RAN (у которого я позаимствовал много идей, за что и признателен) сделал чтобы у него не дублировались записи, при вводе новых. Может кто подскажет, как в моём варианте (хорошо отработанном и отшлифованным уважаемым Hugo) сделать тоже самое. Понимаю, что нужно добавить небольшой блок с проверкой хотя бы первого столбика (идентификационного кода), но с какого боку подлезть и не знаю.
Очень много хороших советов, решений и достойных идей. В погоне за вашим разгулом фантазии, я не успеваю подтянуть теорию :) Сейчас постараюсь с новой табличкой поработать самостоятельно. Но если будут какие либо интересные решения по этой (и её модификациям), не упущу момента и всё равно подсмотрю :)
Ещё раз большое спасибо. Более дружественно настроенный коллектив, в наш обозлённый век, надо ещё поискать.
{quote}{login=Юрий М}{date=03.05.2011 12:13}{thema=Re: }{post}{quote}{login=}{date=03.05.2011 12:01}{thema=}{post}Юрий, там ссылка померши -({/post}{/quote} Точно - открывается на короткое время и всё... Но известно название - может ещё где есть :-){/post}{/quote}
Я страницу просто тормознул на пол загрузки и выдернул ссылку. К сожалению там макрос был закрыт паролем. Пришлось другим макросом пароль отключать. Выкладываю уже без пароля, если кто хочет покопаться.
to RAN
Последним образцом вы меня просто разочаровали. Мне захотелось всё у себя переделать :) Действительно навигация стала более логичной. А если учесть поиск, то и удобнее. С кнопкой "Анкета" я конечно не продумал, хотя она сама напрашивается.
С textbox autotab тоже как-то плохо получается, хотелось как лучше, а получилось... Надо делать либо все, либо ни одного.
Ну в общем ваш пример, какое-то новое вдохновение навеял. Я так, с этой формой, до конца года не растанусь. Хорошо хоть праздники, а то сижу все ночи на пролёт, о работе даже и не вспоминаю :)
{quote}{login=Igor67}{date=02.05.2011 06:53}{thema=}{post}2 Юрий М В 2007 этот формат уже не поддерживается:({/post}{/quote} Вот и я об этом же. Не нашёл сохранения в формат .dbf, поэтому и возникли сомнения в возможности этого.
Так как же на счёт конвертации в .dbf? Есть ли вообще такая возможность. Ведь с одной стороны, сам Excel открывает .dbf - файлы без всякой конвертации, но с другой стороны у него нет сохранения в этот формат.
{quote}{login=Юрий М}{date=30.04.2011 08:34}{thema=}{post}Из моего ничего не пригодилось? Или не смотрели?{/post}{/quote}
Мне поисковичёк очень понравился. Но для моей формы он великоват. Можно его как-то сделать отдельным блоком, чтобы вызывался кнопкой с формы? Так же приглянулась идея с выделением ячейки на листе, при переходе вперёд-назад. Наглядно получается. Ещё, у вас получилось запустить календарь с клавиатуры. Но если закрыть его через крестик закрытия окна (правый верхний угол), то появляется ещё один календарь.
И ещё один вопросик. Вы так много прописали в самом модуле, это какое-то правило, или просто ваш стиль? По моему это можно всё записать прямо в форме, ведь это как бы к ней относится? Никак не могу уловить, что нужно писать в модуль, а что в форму.
1. Никак не могу понять как RAN сделал так, чтобы при вводе данных, которые уже существуют, они не вводились, т.е. не дублировались несколько раз.
2. При анализе кода RAN возник вопрос: -"Какую функцию имеет обработка даблклика, т.е. для чего она нужна?"
3. Я сделал (по наводке Hugo и Юрия М) рисунок-кнопочку в форме ввода, которая при нажатии переводит ячейки с текстом в верхний регистр. Private Sub Im_registr_Click() TIN.Value = UCase(TIN.Value) ... End Sub Но хотелось бы на будущее (вдруг в других таблицах кому либо понадобится) иметь возможность нажатием на эту же кнопку привести значения в нижний регистр или как в письме (кода первые слова в предложении с заглавной буквы). Вообще можно ли реализовать такое?
4. Подскажите, как можно реализовать конвертацию данной страницы (только без кнопочек и приукрашательств, просто заголовки и данные) в отдельный файл формата базы данных (*.dbf)? Оказывается у них (в отделении по социальному страхованию) есть своя база данных, которая требует файлы .dbf, т.е. печатайте где хотите, распечатывайте анкеты в Excel, при помощи макроса заполнения анкет, но данные нам приносите в формате .dbf для нашей базы данных. Вот такая вот своеобразная логика в наших гос.структурах :)
А я всё надеюсь сделать идеальный шаблон для Excel, в котором можно решить все вопросы (согласно данной работы) любому, я подчёркиваю ЛЮБОМУ, человеку с разным уровнем умений, знаний и грамотности.
Хотя моей жене уже достаточно того, что уже сделано, но не люблю я останавливаться на полуфабрикатах. Уж больно меня зацепила эта задача. Тем более назрели ещё две формочки для других документов. Но с ними я буду разбираться самостоятельно без единого вопроса. Вот такие у меня будут практические задания и контрольная, для закрепления и осмысливания материала :) Надеюсь я вам ещё не надоел :)
В новой версии файла: 1. добавлена справка; 2. добавлены все названия кнопок; 3. добавлена кнопка "Верхний регистр"; 4. уменьшена панель "Меню".
Вы совершенно правы, я был невнимателен и вместо FULLN_U.SetFocus: TIN.SetFocus я написал FULLN_U.SetFocus TIN.SetFocus Что касается тумблера. Дописав вашу строчку, получил блок такого вида:
Private Sub ScrollBar1_Change() 'Изменение скроллбара и изменение отображаемой записи If Sheets("база").Cells(NextRow, 6) = "" Then ob_POL_M = Empty: ob_POL_W = Empty [BACK].Enabled = -(ScrollBar1.Value = ScrollBar1.Min) - 1 [FORWARD].Enabled = -(ScrollBar1.Value = ScrollBar1.Max) - 1 NextRow = ScrollBar1 + 1 Call ZAPIS_GO FULLN_U.SetFocus: TIN.SetFocus End Sub
Но и это не решило проблему. Возможно я её неправильно описал. Когда запускаешь форму, то она открывается с пустыми полями и отключёнными тумблерами. Но стоит только подняться выше и вернутся назад, то активным становится тумблер "Женщина"
По поводу скроллбара, я не против, но не каждому он нужен. А так как форум получился общеобразовательным, то хотелось предусмотреть несколько вариантов. Самое простое решение предложил Hugo -не показывать скролл, но оставить его процедуры.
Спасибо за решение проблемы с "Enter". Как говорится, всё гениальное просто. Но и тут возникают вопросы. Почему переход по "Enter" останавливается при достижении тумблеров или переключателя?
to Hugo
Возможно я опять не правильно поставил вопрос. Мне не важно как будет решаться задача с верхним регистром, будь это подключение перед началом работ, или принудительное сохранение в верхнем регистре. Вы наверняка заметили, что анкета заполняется буквами верхнего регистра. Но люди есть люди, иногда могут забыть и заполнить в нижнем регистре, а потом сидеть и перенабирать. Можно конечно, используя потенциал Excel, сменить регистр программно, но ведь многие этого не умеют. Да, и защиту от дурака ещё никто не отменял :)
Пробовал прикрутить одну интересную надстройку, которая помимо разного прочего, может изменять регистр в выделенном диапазоне. Отдельно она отрабатывает хорошо, но при попытке прикрутить её к моему проекту (экспорт - импорт + изменение названий модуля и формы), создаёт помехи макросу создания анкеты. Тот после использования надстройки начинает строить не бланк, а кучу разрозненых символов. Интересная надстройка, прилагаю к сообщению, может кому понадобится.
Подскажите пожалуйста более конкретно, что вы рекомендовали сделать с Value=UCase(Value). Заранее благодарю.
to All
Прошу не пинать меня сильно, ведь я только учусь. Мне не хочется просто сдирать ваши кода, мне хочется разобраться. И я потихоньку разбираюсь сравнивая их, и ещё информацию из книг. Да и темп вы задали такой, что я уже не успеваю. Поэтому прошу не просто писать "Прикрутите то-то и то-то" или "Сделай как у...", а пишите хотя бы названия блока, в который следует заглянуть (например, Private Sub ScrollBar1_Change(), а если что-то добавляется в другие модули, то и это указывайте. Это не только сэкономит время, но и поднимет веру в себя новичкам, которые заглядывают на этот сайт с воплем о помощи. Вы также сейчас ориентируетесь в этом вопросе с полу слова, но уже через пол года - год вам придётся сильно вникать, если захотите воссоздать что-то подобное. Пишите, пожалуйста так, как будто перед вами сидит толпа молоденьких учениц. Ну пожалуйста ;)
С сообщением решил проще, написал строку: If MsgBox("Изменить данные?", vbYesNo) <> vbYes Then Exit Sub и работает без лишних доп. вопросов, только "Да" или "Нет"
Добрый день. Спасибо за советы. Но как всегда, пытливому уму всегда чего-то не хватает :) Созрел ещё один вопрос: - "Как при открытии формы ввода данных можно принудительно включать верхний регистр?"
to Hugo Я действительно уже окончательно замотался. Забыл что можно же поставить такой же запрос, как я ставил на закрытие. :( !Хотя в варианте от RAN он работать не будет.
{quote}{login=Юрий М}{date=29.04.2011 03:21}{thema=Re: Re: }{post}{quote}{login=vitendo}{date=29.04.2011 02:33}{thema=Re: }{post}{quote}{login=Юрий М}{date=28.04.2011 09:46}{thema=}{post}{/post}{/quote}если при открытии формы начинаешь идти к первой строке скроллом или кнопками всё вроде отлично, пока не дойдёшь до первой строки. И вот тут "ба-ба-бам!!!" - DeBug собственной персоной. Что с этим можно сделать?{/post}{/quote} Проверять - не первая ли это строка. Но разбираться с таким огромным файлом...{/post}{/quote}
Поменял на OKButton.SetFocus и ошибка ушла. Только фокус постоянно стоит на этой кнопке. Ошибка скорее всего из-за того, что одна команда указывает на снятие фокуса с кнопки BACK, а другая указывает на фокусировку на ней.
Файл может и огромный, но RAN его переписал и чётко структурировал. Я для себя даже расставил по порядку, как я его понимаю :) и дал описание каждому блоку команд. Теперь нахожу всё что нужно сразу.
У меня другая проблема, я за 6 дней знакомства с макросами, ещё слабо понимаю структуру синтаксиса, да и сами функции практически не знаю. Смотрю как вы здесь браво оперируете, по сути одними и теми же командами, но с разными дополнениями, и с разных сторон. И начинаю понимать, что та структура, которая создавалась у меня в голове, просто рассыпалась, и подсказывает что нужно начинать с азов, а не сразу хвататься за казалось бы маленькую задачу, но обросшую многими хотелками. И только благодаря всесторонней помощи и энтузиазму, эта идея имеет своё продолжение.
И меня вдохновляет мысль, что эта табличка, в принципе, имеет много сфер применения. И найдётся много людей, которые смогут готовый вариант подпилить под себя, и будут всем вам благодарны.
Одно только меня смущает, что наши кнопки "Предыдущий" и "Следующий" завязаны на скроллбар. А если кому понадобится табличка без него, а знаний не хватает, то и не сможет сделать формочку
{quote}{login=Юрий М}{date=29.04.2011 03:21}{thema=Re: Re: }{post}{quote} Проверять - не первая ли это строка. Но разбираться с таким огромным файлом...{/post}{/quote}
Поменял на OKButton.SetFocus и ошибка ушла. Только фокус постоянно стоит на этой кнопке. Ошибка скорее всего из-за того, что одна команда указывает на снятие фокуса с кнопки BACK, а другая указывает на фокусировку на ней. Файл может и огромный, но RAN его переписал и чётко структурировал. Я для себя даже расставил по порядку, как я его понимаю :) и дал описание каждому блоку команд. Теперь нахожу всё что нужно сразу.
У меня другая проблема, я за 6 дней знакомства с макросами, ещё слабо понимаю структуру синтаксиса, да и сами функции практически не знаю. Смотрю как вы здесь браво оперируете, по сути одними и теми же командами, но с разными дополнениями, и с разных сторон. И начинаю понимать, что та структура, которая создавалась у меня в голове, просто рассыпалась, и подсказывает что нужно начинать с азов, а не сразу хвататься за казалось бы маленькую задачу, но обросшую многими хотелками. И только благодаря всесторонней помощи и энтузиазму, эта идея имеет своё продолжение.
И меня вдохновляет мысль, что эта табличка, в принципе, имеет много сфер применения. И найдётся много людей, которые смогут готовый вариант подпилить под себя, и будут всем вам благодарны.
Одно только меня смущает, что наши кнопки "Предыдущий" и "Следующий" завязаны на скроллбар. А если кому понадобится табличка без него, а знаний не хватает, то и не сможет сделать формочку.
Уважаемые гуру, мои вложенные файлы: post_223585.rar и post_223586.rar переименуйте в Анкета (2011.04.28).part01.rar и Анкета (2011.04.28).part02.rar соответственно. Это связанные архивы, друг без друга не распакуются.
Private Sub ScrollBar1_Change() 'Изменение скроллбара и изменение отображаемой записи [BACK].Enabled = -(ScrollBar1.Value = ScrollBar1.Min) - 1 [FORWARD].Enabled = -(ScrollBar1.Value = ScrollBar1.Max) - 1 NextRow = ScrollBar1 + 1 Call ZAPIS_GO TIN.SetFocus BACK.SetFocus End Sub
Вы совершенно правы, мигание и фокусировка с выделением на второй ячейке прекратились. Но, опять это великое "Но", если при открытии формы начинаешь идти к первой строке скроллом или кнопками всё вроде отлично, пока не дойдёшь до первой строки. И вот тут "ба-ба-бам!!!" - DeBug собственной персоной. Что с этим можно сделать?
Да, чуть не забыл. В двух вариантах, хотелось бы запускать календарик от Юрия М с клавиатуры, а не только мышкой. Ну уж больно он стильный получился, те что я встречал раньше, по сравнению с ним, какие-то примитивные были. А он не наляпист, функционален и эстетичен.
2. от RAN не устраивает: а) периодическое выделение второй ячейки при использовании скролла; б) при поиске строк, для изменения, скроллом или клавишами, при возврате на пустые ячейки, подсвечивается тумблер. При чём всегда ставится на позицию "Женщина" в) не хватает запроса при выходе, как был у меня изначально.
Я конечно понимаю что этот запрос кажется излишним, но по собственному опыту знаю - то что мужчине кажется логичным, то женщине даже в голову не прийдёт. А большинство бухгалтеров, которые, я надеюсь заценят и будут пользоваться этой надстройкой, это женщины. Я ничего не имею против женщин. Я даже их люблю :) Но мне довелось немного поработать в чисто женском коллективе, в котором узнали что я немного разбираюсь в компьютерах. И в тот момент, когда меня стали звать, чтобы посмотреть на то, что "сам компьютер наделал", я прозрел. Я понял что байки сис.админов про блондинок какие-то пресные, по сравнению с жизнью. Они не дуры, они просто мыслят по другому. Совсем по другому. Ну логикой там и не пахнет. Извините наболело :) Ну в общем, помогите мне вернуть этот запрос.
Вот к таким "находкам" я пришёл немного потестив нашу бету :)
Веду уже два направления одного проекта. Условно один называю от Hugo, другой от RAN. В обоих есть, то что не хватает в другом. 1. от Hugo мне не хватает: а) подтверждения на сохранение ихменений; б) отключение от случайного ввода, когда нажимаешь Enter при вводе данных в полях ввода. Я иногда нажимаю Enter по привычке, так оно сразу сохраняет то, что успел написать. И очищает ячейки. Или хотелось, если можно, сделать переход не табрм, а Enter'ом; в) плохо то, что при открытии формы ввода, активны кнопки "Предыдущий" и "Следующий". Если сразу нажать кнопку "Предыдущий", то всё хорошо, показывает последнюю заполненую строку. Но если сразу нажать "Следующий", то получаем ошибку с окном DeBug.