Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с 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, спасибо,

но первый вариант не подходит (я об этом писал в начале).
А второй - можно использовать.
Раньше я вручную ставил "_" в конце. А ночью smile   решил делать почти то, что предложили Вы, -- только я разделяю длинный номер полиса на части (6 и 8) и склеиваю их так, что между ними еще "_".
770000_12345678

Буду ждать новых предложений...

Автор: Akina 26.10.2015, 10:54
Цитата(zlato @  26.10.2015,  11:36 Найти цитируемый пост)
я разделяю длинный номер полиса на части (6 и 8) и склеиваю их так, что между ними еще "_".
770000_12345678

Если это учёт "для внутреннего употребления" - рекомендую вообще разделить этот номер на две части. Ведь первая, 6-значная, всегда одинакова для всех полисов, кажется... нет? и заполнять её автоматически (само собой с возможностью корректировки). А вторую, 8-значную, заполнять обычным порядком - с ней таких проблем быть не должно.
А если это - учёт, выдающий сведения "наружу" в электронном формате, то лучше ориентироваться на формат передачи данных. Теоретически, там между этими группами должен передаваться пробел.

Добавлено через 1 минуту и 30 секунд
Цитата(zlato @  26.10.2015,  11:36 Найти цитируемый пост)
первый вариант не подходит (я об этом писал в начале).

Не было такого. ВЫ говорили только о преобразовании типа значения, и ни полслова о формате ячейки.

Автор: zlato 26.10.2015, 17:28
Akina, спасибо еще раз,

извините, я действительно написал только про преобразование в текст в макросе.
Но я пробовал и через "Формат ячейки" и до, и после заполнения -- только меняется выравнивание, а представление все равно экспоненциальное.

Первая часть медицинского полиса одинаковая только в Москве (770000), и то, судя по имеющимся номерам, не всегда (это зависит от страховой компании?).

Так что, скорее всего, я буду в макросе разделять на 2 части и давать с нижним подчеркиванием между ними.

Эти списки идут в бумажного виде в поликлинику.

Наверное, можно закрывать тему?


Автор: Akina 26.10.2015, 17:35
На деле - я бы рекомендовал потратить некоторое время на освоение другого инструмента, и вместо Excel использовать Access. 

Автор: zlato 26.10.2015, 17:59
Осваивать не нужно smile - я знаю Access достаточно хорошо.
Дело в том, что исходная для меня информация в медкабинете была в виде таблиц в Word'e и Excel. И, хотя можно было превратить все списки в таблицы  Access, я решил  использовать Excel.

Спасибо за все.

Дмитрий.

Автор: Akina 26.10.2015, 18:33
Access удобнее. 
Во-первых, нет этой идиотской инициативы с преобразованием типов и самоволкой в отображении. Сказали - поле текстовое, значит, будет текст, и баста.
Во-вторых, формы ввода и выходные отчёты делаются на счёт "раз", причём сразу относительно красивые.
В третьих, отобрать по нужному критерию (тот же месяц рождения) - раз плюнуть, только в запросе - источнике данных отчёта критерий отбора поменять.
Ну и, ежели надо, выгрузить в Excel или Word (всё или выборку) - делается в два клика.

А главное - Access всё-таки система управления данными, тогда как Excel всего лишь табличный процессор. А инструмент лучше брать по задаче.

Автор: zlato 26.10.2015, 18:48
Akina и другие smile

возникла новая (точнее -- именно она и была) проблема.

Наверное, я неточно сформулировал проблему.

Экспоненциальная форма длинного целого числа появляется в ячейке при вставке информации из 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
Цитата(zlato @  27.10.2015,  23:21 Найти цитируемый пост)
1) запрос  с условием, использующим ссылку на поле со списком.
2) макрос, открывающий его;
3) привязал макрос к событию "После обновления"

Макросы - это чёрный ящик. Да и запрос смотреть не комильфо.
Я бы порекомендовал:
1) На основании запроса создать отчёт
2) В методе - обработчике события использовать VBA в модуле формы
3) В методе изменять Filter (хуже - RecordSource) отчёта, получив предварительно ListBox.Text, а затем его открывать на просмотр

Автор: zlato 28.10.2015, 11:25
Акина, 

спасибо:
==============
1) На основании запроса создать отчёт
2) В методе - обработчике события использовать VBA в модуле формы
3) В методе изменять Filter (хуже - RecordSource) отчёта, получив предварительно ListBox.Text, а затем его открывать на просмотр
==============

До п. 1 я додумался сам (ночью smile ), хотя и не реализовал его.

Я шел поэтапно. Сначала решил проверить запрос (в нем надо было использовать месяц полной даты и значение из поля со списком).
Потом, естественно, сделал бы отчет. Но последний-то на основе запроса -- как бы не было того же, что и без отчета. Буду пробовать.  

И попытаюсь уйти от макросов...
 


Автор: Akina 28.10.2015, 12:36
Цитата(zlato @  28.10.2015,  12:25 Найти цитируемый пост)
Я шел поэтапно. 

Какой смысл в этапе "вывод запроса", если он впоследствии будет выброшен? достаточно было убедиться, что при открытой форме и сделанном в поле выборе запрос при открытии даёт верные данные.

К слову - использовать в запросах ссылки на контролы формы само по себе плохо - и некрасиво, и потенциально грабельно.

Автор: zlato 28.10.2015, 19:53
Акина,

я обнаружил причину проблем.
Надо закрывать предыдущее состояние отчета (а когда его не было (вчера) -- то закрывать запрос) и только потом открывать его с новым значением в запросе. 
Такой макрос работает, как и должен.

Спасибо за идею использовать Access и за все остальное.

Буду доводить все "до ума"...


Автор: zlato 28.10.2015, 20:09
Акина,

именно это я и хотел сделать -- проверить, что запрос выдает верные данные (при этом я разбирался, как использовать значение  из поля со списком и как выделить из "полной даты" месяц). И на именно этой стадии выяснилось, что запрос выдает не новый результат, а старый. После создания и открытия отчета  -- проблема оставалась. Как я все решил, я написал в предыдущей записи.

А почему "использовать в запросах ссылки на контролы формы само по себе плохо - и некрасиво, и потенциально грабельно"?

Пользователь выбирает из списка и получает результат. У меня БД простая. Неужели это может повлиять на ее работоспособность и надежность?

И что такое "грабельно"? smile

Еще раз спасибо за все.

Дмитрий.

Автор: Akina 28.10.2015, 20:20
Цитата(zlato @  28.10.2015,  21:09 Найти цитируемый пост)
А почему "использовать в запросах ссылки на контролы формы само по себе плохо - и некрасиво, и потенциально грабельно"?

Пользователь выбирает из списка и получает результат. У меня БД простая. Неужели это может повлиять на ее работоспособность и надежность?

Ну хотя бы потому, что базы имеют обыкновение меняться. Дорабатываться, оптимизироваться и пр. Вот оно тебе надо - помнить, что отчёт не будет работать, если ты изменишь форму, потому что её контрол использован как фильтр запроса? да застрелиться... куда как проще сделать типа

Код

sub button_click()
report.filter = "='" & me.combobox.text & "'"
report.open forView, vbModal
end sub

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)