| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование, связанное с MS Office > Длинное число как текст |
| Автор: zlato 25.10.2015, 21:18 |
| Господа, я -- учитель информатики. Медицинским работникам нашего (и не только) учебного заведения нужно составлять списки учеников, родившихся в том или ином месяце. Я сделал необходимый макрос в Excel. Но имеется одна проблема. 16-значный номер полиса представляется в экспоненциальной форме даже после преобразования его в текст функцией CSTR (хотя и выравнивается по левому краю как текст). Понятно, что для поликлиники такой номер полиса 1,23457E+13 не подходит. Что можно сделать? Спасибо. |
| Автор: Akina 25.10.2015, 23:15 |
| Форматировать ячейку (колонку) как текст ДО её заполнения. Или, например, добавлять символ одинарной кавычки ' в начало числа. |
| Автор: zlato 26.10.2015, 10:36 |
| Akina, спасибо, но первый вариант не подходит (я об этом писал в начале). А второй - можно использовать. Раньше я вручную ставил "_" в конце. А ночью 770000_12345678 Буду ждать новых предложений... |
| Автор: zlato 26.10.2015, 17:28 |
| Akina, спасибо еще раз, извините, я действительно написал только про преобразование в текст в макросе. Но я пробовал и через "Формат ячейки" и до, и после заполнения -- только меняется выравнивание, а представление все равно экспоненциальное. Первая часть медицинского полиса одинаковая только в Москве (770000), и то, судя по имеющимся номерам, не всегда (это зависит от страховой компании?). Так что, скорее всего, я буду в макросе разделять на 2 части и давать с нижним подчеркиванием между ними. Эти списки идут в бумажного виде в поликлинику. Наверное, можно закрывать тему? |
| Автор: Akina 26.10.2015, 17:35 |
| На деле - я бы рекомендовал потратить некоторое время на освоение другого инструмента, и вместо Excel использовать Access. |
| Автор: zlato 26.10.2015, 17:59 |
| Осваивать не нужно Дело в том, что исходная для меня информация в медкабинете была в виде таблиц в Word'e и Excel. И, хотя можно было превратить все списки в таблицы Access, я решил использовать Excel. Спасибо за все. Дмитрий. |
| Автор: Akina 26.10.2015, 18:33 |
| Access удобнее. Во-первых, нет этой идиотской инициативы с преобразованием типов и самоволкой в отображении. Сказали - поле текстовое, значит, будет текст, и баста. Во-вторых, формы ввода и выходные отчёты делаются на счёт "раз", причём сразу относительно красивые. В третьих, отобрать по нужному критерию (тот же месяц рождения) - раз плюнуть, только в запросе - источнике данных отчёта критерий отбора поменять. Ну и, ежели надо, выгрузить в Excel или Word (всё или выборку) - делается в два клика. А главное - Access всё-таки система управления данными, тогда как Excel всего лишь табличный процессор. А инструмент лучше брать по задаче. |
| Автор: zlato 26.10.2015, 18:48 |
| Akina и другие возникла новая (точнее -- именно она и была) проблема. Наверное, я неточно сформулировал проблему. Экспоненциальная форма длинного целого числа появляется в ячейке при вставке информации из Word'a на лист. При этом последняя цифра теряется. После этого любые манипуляции теряют смысл. Итак, еще раз. Исходная информация об учениках, в том числе номера полиса, -- в таблице Word. При вставке ее на лист значение представляется как число в экспоненциальной форме, а главное -- последняя цифра заменяется на 0. Я решал проблему так -- в Word, перед вставкой в EXcel, добавлял _ в конце и затем копировал. Но хочется не просматривать все списки, а автоматизировать изменения. Как я понимаю, надо все менять в Word'e или при копировании, или при вставке (если возможно). Что делать? Добавлено через 7 минут и 16 секунд Akina, когда я писал последний комментарий, я еще не видел Вашего нового. Попробую сделать все в Access... Спасибо за все. |
| Автор: zlato 27.10.2015, 22:21 |
| Акина, здравствуйте, я по Вашему совету стал использовать Access. Хочу, чтобы после выбора значения из поля со списком на форме выполнялся макрос, по котором выполнится запрос на отбор данных с выбранным значением. Создал: 1) запрос с условием, использующим ссылку на поле со списком. 2) макрос, открывающий его; 3) привязал макрос к событию "После обновления" После выбора из списка запрос, если его запустить принудительно, работает правильно. Но макрос открывает запрос с результатом _предыдущего_ использования запроса. То есть он его именно открывает, а не выполняет. Почему-то возможности выполнить, запустить запрос в макросе нельзя -- макрокоманда только "открыть". Можно что-то сделать? Спасибо. |
| Автор: Akina 28.10.2015, 09:07 | ||
Макросы - это чёрный ящик. Да и запрос смотреть не комильфо. Я бы порекомендовал: 1) На основании запроса создать отчёт 2) В методе - обработчике события использовать VBA в модуле формы 3) В методе изменять Filter (хуже - RecordSource) отчёта, получив предварительно ListBox.Text, а затем его открывать на просмотр |
| Автор: zlato 28.10.2015, 11:25 |
| Акина, спасибо: ============== 1) На основании запроса создать отчёт 2) В методе - обработчике события использовать VBA в модуле формы 3) В методе изменять Filter (хуже - RecordSource) отчёта, получив предварительно ListBox.Text, а затем его открывать на просмотр ============== До п. 1 я додумался сам (ночью Я шел поэтапно. Сначала решил проверить запрос (в нем надо было использовать месяц полной даты и значение из поля со списком). Потом, естественно, сделал бы отчет. Но последний-то на основе запроса -- как бы не было того же, что и без отчета. Буду пробовать. И попытаюсь уйти от макросов... |
| Автор: Akina 28.10.2015, 12:36 |
Какой смысл в этапе "вывод запроса", если он впоследствии будет выброшен? достаточно было убедиться, что при открытой форме и сделанном в поле выборе запрос при открытии даёт верные данные. К слову - использовать в запросах ссылки на контролы формы само по себе плохо - и некрасиво, и потенциально грабельно. |
| Автор: zlato 28.10.2015, 19:53 |
| Акина, я обнаружил причину проблем. Надо закрывать предыдущее состояние отчета (а когда его не было (вчера) -- то закрывать запрос) и только потом открывать его с новым значением в запросе. Такой макрос работает, как и должен. Спасибо за идею использовать Access и за все остальное. Буду доводить все "до ума"... |
| Автор: zlato 28.10.2015, 20:09 |
| Акина, именно это я и хотел сделать -- проверить, что запрос выдает верные данные (при этом я разбирался, как использовать значение из поля со списком и как выделить из "полной даты" месяц). И на именно этой стадии выяснилось, что запрос выдает не новый результат, а старый. После создания и открытия отчета -- проблема оставалась. Как я все решил, я написал в предыдущей записи. А почему "использовать в запросах ссылки на контролы формы само по себе плохо - и некрасиво, и потенциально грабельно"? Пользователь выбирает из списка и получает результат. У меня БД простая. Неужели это может повлиять на ее работоспособность и надежность? И что такое "грабельно"? Еще раз спасибо за все. Дмитрий. |
| Автор: Akina 28.10.2015, 20:20 | ||||
Ну хотя бы потому, что базы имеют обыкновение меняться. Дорабатываться, оптимизироваться и пр. Вот оно тебе надо - помнить, что отчёт не будет работать, если ты изменишь форму, потому что её контрол использован как фильтр запроса? да застрелиться... куда как проще сделать типа
|