Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > подскажите - преобразование текста в форме


Автор: abyrval 16.1.2008, 18:01
подскажите как сделать в форме vba ms excel :
есть textbox куда надо ввести номер заявки (например 01234F или 00001F)
есть ли возможность и/или как это реализовать -  ввести просто "1234", которое автоматически переведется в "01234F", проблема в том что количество вводимых символов может быть разное, т.е. нужно просчитать кол-во введенных символов и добавить соответственно недостающие части.
к сожалению в хелпах и фк таких разделов нет, а штудировать учебники.... smile  smile 
заранее спасибо

Автор: bilya 17.1.2008, 03:46
Да все делается.  
Общий принцип такой:
Код

myStr = Left("00000", 5 - Len(TextBox1.Text)) & TextBox1.Text & "F"

Автор: bilya 17.1.2008, 08:29
А это работает в одном текстбоксе при наборе номера
Код

Private flag As Boolean ' эта строка должна быть в самом верху модуля формы

Private Sub TextBox1_Change()
  If flag = False Then Vvod
End Sub

Public Sub Vvod()
  mystr = TextBox1.Text
  If InStrRev(mystr, "F") <> 0 Then mystr = Left(mystr, Len(mystr) - 1)
  Do While InStr(1, mystr, "0") = 1
    mystr = Mid(mystr, 2)
  Loop
  flag = True
  If Len(mystr) > 5 Then mystr = Left(mystr, 5)
  TextBox1.Text = Left("00000", 5 - Len(mystr)) & mystr & "F"
  TextBox1.SelStart = Len(TextBox1.Text) - 1
  flag = False
End Sub

 smile 

Автор: Akina 17.1.2008, 08:33
Цитата(bilya @  17.1.2008,  04:46 Найти цитируемый пост)
Общий принцип такой

Это как раз весьма частный принцип. Общий - это форматирование по маске.

Автор: bilya 17.1.2008, 11:27
По маске в Ехселе...
 smile 

Автор: Akina 17.1.2008, 11:42
bilya, я о функции Format и аналогичных

Автор: abyrval 17.1.2008, 12:59
Цитата(bilya @ 17.1.2008,  03:46)
Да все делается.  

спасибо огромное, за принцип и за реализацию, на РЕП не хватает постов к сожалению)

может тогда еще подскажешь
есть комбо бокс в форме:
Код

Private Sub ComboBox3_Enter()
UserForm1.ComboBox3.SetFocus
Worksheets("списки").Activate
Dim Диапазон As String
Dim n As Integer
n = Application.CountA(Range("c:c"))
Диапазон = "c1:c" & CStr(n)
ComboBox3.RowSource = Диапазон
End Sub

работает отлично, при вводе буквы, предлагает допустимые варианты smile 

а если я вызываю вторую форму из первой
Код

Private Sub TextBox7_Change()
If TextBox7.Value = "0" Then
UserForm3.Show
UserForm3.ComboBox1.SetFocus
.....
End If
End Sub


В вызываемой форме такие же комбобоксы (тем же кодом оформленные), но при вводе буквы допустимые варианты не предлагаются, в чем загвоздка? вроде же все тоже самое...

Добавлено через 10 минут и 6 секунд
bilya, 
bilya, 
Цитата(Akina @  17.1.2008,  11:42 Найти цитируемый пост)
я о функции Format и аналогичных


про маску знаю
к сожалению форму делаю не только для заявок, поэтому изменять ее в экселе по маске (отдельно от всего) не очень интересно((

Автор: bilya 17.1.2008, 15:28
Akina, ваша правда, подкачала формулировка...  smile 
Код

  myStr = Format(TextBox1.Text, "00000F")

abyrval, если правильно понял, вам нужно у комбобоксов установить свойство MatchEntry = fmMatchEntryFirstLetter. Можно в коде, при инициализации формы
Код

  ComboBox1.MatchEntry = fmMatchEntryFirstLetter


Автор: abyrval 17.1.2008, 15:42
Цитата(bilya @  17.1.2008,  15:28 Найти цитируемый пост)
MatchEntry = fmMatchEntryFirstLetter


дак вот меня и смущает что у меня стоит и в первой и во второй форме MatchEntry = 0 -.......
мистика. епреустановить чего-нбд чтоль smile 

Автор: abyrval 17.1.2008, 16:00
вот даже принт снял - две картинки:
1. настройки
2. результат
 smile 

Автор: bilya 17.1.2008, 17:04
Попытался смоделировать вашу ситуацию (с  _Change, .SetFocus на всякий случай) - у меня работает что с нулем, что с единицей
А не пробовали все таки на UserForm_Initialize прописать эти свойства? 

Автор: abyrval 17.1.2008, 17:19
Цитата(bilya @ 17.1.2008,  17:04)
Попытался смоделировать вашу ситуацию (с  _Change, .SetFocus на всякий случай) - у меня работает что с нулем, что с единицей
А не пробовали все таки на UserForm_Initialize прописать эти свойства?

прописал где только можно, и в UserForm_Initialize, и даже потом в Private Sub ComboBox1_Enter() запихнул...
самое интересное другое - если я запускаю только форму выбора точек (UserForm3) напрямую, то подстановка работает,
если вызываю ее "0" из userform1, то нет... клиника

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