Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 07.11.2008, 16:42   #1
luxery
 
Регистрация: 07.11.2008
Сообщений: 9
По умолчанию Пользовательский формат VBA Excel

Может кто-то уже сталкивался с подобной проблемой.
Хочу чтоб при вводе телефонного номера в поле на форме, номер вводился по маске, например, ввожу 325689, и в этом поле введенные цифры группировались как 32-23-56. Искала информацию по этому поводу, но ничего путного не нашла. Поле для ввода тел. номера у меня на форме Text.box. Читала что маску можно организовать с помощью спец. объекта VBA в Excel - объект Masked Edit Control, только вот у себя в новом 2007 офисе его не могу найти, просмотрела весь список. Может это можно сделать и с простым полем? Очень хочеться сделать маску, вот только как ? Люди, помоги советом, буду признательна.
luxery вне форума
Старый 07.11.2008, 17:02   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот один из способов (не лучший из возможных, но вдруг подойдёт):

Предполагается, что на форме присутствует текстбокс с именем TextBox1
Код:
Private Sub TextBox1_Change()
    t = Me.TextBox1.Text
    If Right(t, 2) Like "##" And Len(t) < 6 Then t = t & "-"
    Me.TextBox1.Text = t
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    t = Me.TextBox1.Text
    If KeyCode = 8 And Right(t, 1) = "-" Then t = Left$(t, Len(t) - 2): KeyCode = 0
    If KeyCode <> 8 And Len(t) > 7 Then KeyCode = 0
    Me.TextBox1.Text = t
End Sub
Ну а в ячейку ввести шестизначный номер в нужном Вам формате ещё проще: (по крайней мере, я так делаю - в текстбоксе запрашиваю 6-значный номер без маски, а в ячейки уже записываю с маской)

cell.Value = Format(PhoneNumber, "##-##-##")
EducatedFool вне форума
Старый 07.11.2008, 17:23   #3
luxery
 
Регистрация: 07.11.2008
Сообщений: 9
По умолчанию

Спасибо, вы мне очень помогли, первый код, что вы привели, подошел идеально, работает. А вот второй не работает.
и еще вопрос, может он покажется глупым ( я пока чайник), почему именно событие TextBox1_Change(), а не например, KeyPress?
Еще один вопрос: при работе первого кода, как я уже говорила работает все хорошо, только вот, если в поле я захочу удалить номер и набрать другой, то удаляется только 2 последние цифры? Почему так?
luxery вне форума
Старый 07.11.2008, 17:38   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
А вот второй не работает.
Попробуйте так:
Код:
Sub test()
    PhoneNumber = "123456"   ' или PhoneNumber = 123456
    Cells(1, 1).Value = Format(PhoneNumber, "##-##-##")
    [a2].Value = Format(PhoneNumber, "##-##-##")
    Range("a3").Value = Format(PhoneNumber, "##-##-##")
    Cells(2).Activate
    ActiveCell.Value = Format(PhoneNumber, "##-##-##")
End Sub
Цитата:
почему именно событие TextBox1_Change(), а не например, KeyPress
Да, собственно, первое, что взбрело в голову...

Вообще, в этом коде ещё многое необходимо учесть - например, что б можно было вводить только цифры, и т.д.

Это был всего лишь пример.

Цитата:
Еще один вопрос: при работе первого кода, как я уже говорила работает все хорошо, только вот, если в поле я захочу удалить номер и набрать другой, то удаляется только 2 последние цифры? Почему так?
Странно...
У меня сколько надо, столько и удаляется. (проверял много раз - но у меня Excel 2003 rus)
EducatedFool вне форума
Старый 07.11.2008, 18:10   #5
luxery
 
Регистрация: 07.11.2008
Сообщений: 9
Вопрос

спасибо за второй повторный присланный код, вот только в моем случае он скорее не подойдет, т.к. в моей программе данные сначала заносятся в форму, а из нее уже на лист.
Другой вопрос, тот код что первый, я его у себя реализовала. Для ввода 6-значного номера все хорошо. А как сделать маску тогда для 11-го номера. Ведь в поле может вводится номер не только 6-ный, но и номер моб. тел. Я вот пыталась что-то поправить в вышем коде, только вот не все корректно работает. Мне бы хотелось что было предусмотрено ввод цифр по маске для 6 цифр, 11 цифр и одномременно два номер с маской. Прикрепляю файл, если вас не затруднит можете там увидеть ваш код, может что подскажите и на этот счет?
Вложения
Тип файла: rar ИС_система_абитуриент10.rar (46.9 Кб, 43 просмотров)
luxery вне форума
Старый 07.11.2008, 18:21   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
объект Masked Edit Control, только вот у себя в новом 2007 офисе его не могу найти, просмотрела весь список
Проверьте наличие файла C:\WINDOWS\system32\MSMASK32.OCX, а если его нет, ничто не мешает скачать его в Интернете и использовать в проекте.

Цитата:
Мне бы хотелось что было предусмотрено ввод цифр по маске для 6 цифр, 11 цифр и одномременно два номер с маской
Предусмотреть можно всё, но код получится огромный...

Мало ли что пользователю вздумается ввести... на все случаи жизни масок не предусмотришь

Я бы оставил просто текстовое поле, а потом уже, при желании, можно разбить введённую строку на отдельные телефонные номера.

Да и элемент управления Masked Edit Control в Вашем случае мало чем поможет - конечно, можно попробовать переключать различные маски в зависимости от содержимого поля, но это будет ненамного проще, чем в случае с Textbox-ом.

Последний раз редактировалось EducatedFool; 07.11.2008 в 18:25.
EducatedFool вне форума
Старый 07.11.2008, 19:09   #7
luxery
 
Регистрация: 07.11.2008
Сообщений: 9
По умолчанию

спасибо и за этот совет, нашла то что советовали, установила. Вот только почему-то объект не хочет добавляться на форму? Выдается ошибка, см. файл прикр. Почему?
Изображения
Тип файла: jpg Безымянный.JPG (10.8 Кб, 182 просмотров)
luxery вне форума
Старый 07.11.2008, 19:25   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Вот только почему-то объект не хочет добавляться на форму
Перед использованием компонента его необходимо зарегистрировать.

Для этого нажмите Пуск - Выполнить, введите строку

regsvr32 MSMASK32.OCX

и нажмите ОК.

(файл должен находиться в папке C:\WINDOWS\system32\, иначе потребуется ввести полный путь к файлу,
например, regsvr32 "C:\Documents and Settings\Администратор\Рабочий стол\MSMASK32.OCX")
EducatedFool вне форума
Старый 07.11.2008, 19:34   #9
luxery
 
Регистрация: 07.11.2008
Сообщений: 9
По умолчанию

спасибо и за этот совет, все сделала как описано, выдалось сообщение что регистрация удачно завершена, вот только ситуация почему-то не поменялась, опять выдается эта же ошибка. Может для этого еще нужно пк перезакрузить?
luxery вне форума
Старый 07.11.2008, 19:39   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Забыл, что одного файла недостаточно...

Извлеките из прикреплённого к сообщению архива файлы, и скопируйте их в папку C:\WINDOWS\system32\

После этого повторите процедуру регистрации.
Перезагружать компьютер не требуется.
Вложения
Тип файла: rar MSMASK32.rar (87.1 Кб, 154 просмотров)
EducatedFool вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA Excel Slicker Помощь студентам 4 04.11.2008 17:14
пользовательский формат или объединение содержимого mr.beginner Microsoft Office Excel 3 08.07.2008 16:39
VBA Excel ComboBox corsarlt Microsoft Office Excel 2 05.06.2008 23:50
Задать формат, числу в VBA valerij Microsoft Office Excel 3 04.06.2008 10:58
VBA i Excel corsarlt Microsoft Office Excel 3 03.04.2008 06:13