Страницы: 1
RSS
Типы данных
 
Подскажите пожалуйста такую вещь. Есть форма с окошком для ввода текста TextBox1.  
Прописан следующий код для этой кнопки:  
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)  
End Sub  
Проблема в том что VBA я не знаю. В Паскале integer - это вроде целочисленный тип данных.  
Я так понимаю , что все значения которые будут вводиться в TextBox1 будут округляться до целых и соответствующим образом обрабатываться. Так ли это? Мне нужно работать не только с целыми числами (например 2.1, 5.43 и т.д.). Как изменить эту строчку, и, если несложно, объясните чайнику что значат эти команды ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer?
 
Посмотрите справку по событию KeyDown  
 
KeyCode - An integer that represents the key code of the key that was pressed or released  
т.е. возвращает число, представляющие код кнопки, которая была нажата или отжата (отпущена)  
 
Shift - The state of SHIFT, CTRL, and ALT  
т.е. положение кнопок SHIFT, CTRL и ALT.  
1 - нажали SHIFT  
2 - нажали CTRL  
3 - нажали ALT
 
ошибся, вместо 3 надо 4  )
 
Pavel55, извините, но я ничего не понял :) Скажите, пожалуйста, отвечает ли эта строка за тип вводимых данных, т.е. определяет ли их целочисленными, а если да, то как можно ее переделать так, чтобы в последствии числа обрабатывались и как нецелые?
 
нет.  
нельзя ввести нецелое число нажатием одной кнопки(даже в комбинации со специальными)
 
slan, извините за мои слабые знания (вернее незнания) VBA, но то ли Вы меня не поняли, то ли я Вас, то ли Вы подшучиваете надо мной. Попробую еще раз сформулировать свой вопрос. Есть окошко с формой, в нем поле для ввода значений TextBox1. Я ввожу туда число (нажатием нескольких кнопок, не одной). Причем я ввожу число например 2.34 (две целых, 34 сотых). Так вот все отлично вводится в форму, не выдается ошибок, но потом при запуске основной части программы есть явная вставка этого значения  в определенную ячейку и введенное мной число в этой ячейки округляется до целых (в примере до 2), а хотелось бы, чтобы отображалось так как вводилось (2.34), в формате самой ячейки можно ставить, например, вид числа с 2 знаками после запятой, все равно отображается 2.00
 
пока вам развернуто отвечал, код стал недействителен..  
 
поэтому теперь коротко: нет - это ответ на ваш вопрос:  
 
Скажите, пожалуйста, отвечает ли эта строка за тип вводимых данных  
 
нет - это не шутка.  
 
ищите там, где данные переписываются в ячейку. в общем случае textbox хранит текст, а не числа, так что и округлять ничего не может.
 
slan, точно это я ступил. Проблема не в этом месте, а вот где:  
[место куда вставляем ячейку] = Cint(Me.TextBox1.Value)
Я убрал этот самый Cint, получилось соответственно вот это:  
[место куда вставляем ячейку] = Me.TextBox1.Value
Теперь ничего вроде не округляется :)  
Но, точка на цифровой клавиатуре, при русской раскладке вводится как запятая. Это, как я понимаю из-за того, что    
" textbox хранит текст, а не числа". А есть ли команда, которая хранит числа, т.е. как будто мы вводим значения в ячейку цифровую. Нашел еще ListBox и ComboBox
 
inputbox
 
или val(me.textbox.value)  
предварительно можно проверить:  
isnumeric(me.textbox.value)
 
inputbox не подходит, т.к. все делается через UserForm, там помимо этого вводимого значения еще есть нужные вещи  
val(me.textbox.value) - блин, очень близко, но не то. Если ввести например 2.54 с цифровой части клавиатуры в англ. расладке, то все нормально и как надо, а если стоит русская раскладка, то опять округляется :(
 
попробуйте заменить точку replace'ом а потом от результата взять val(). и на всякий случай посмотрите формат ячейки куда вставляете. может там собака порылась.
 
"заменить точку на запятую" вот что  я хотел сказать
 
Вот, поиграйся  
 
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)  
   'при вводе запятой, она будет заменяться на точку  
   If KeyAscii = Asc(",") Then KeyAscii = Asc(".")  
End Sub  
 
если надо поменяй точку с запятой местами
 
Pavel55  
Такая штука работает, это то что нужно. Наверное, я всех уже задолбал, но осталась еще небольшая проблема. Там в форме есть кнопки ОК и Отмена. так вот раньше при нажатии клавиши Enter нажималось ОК, а Escape - Отмена. Был прописан такой код:  
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)  
    If KeyCode = vbKeyReturn Then  
    Me.CommandButton1 = True  
    Me.TextBox1.SetFocus  
    Exit Sub  
    End If  
       If KeyCode = vbKeyEscape Then  
       Unload Me  
       End  
       End If  
End Sub  
А теперь если прикрутить остаток строк к Вашему коду, т.е.  
Private Sub TextBox1_KeyPress(ByVal KeyKeyAscii As MSForms.ReturnInteger)  
   If KeyAscii = Asc(",") Then KeyAscii = Asc(".")  
      If KeyCode = vbKeyReturn Then  
      Me.CommandButton1 = True  
      Me.TextBox1.SetFocus  
      Exit Sub  
      End If  
        If KeyKeyAscii = vbKeyEscape Then  
        Unload Me  
        End  
        End If  
End Sub  
То, при нажатии на Enter и Escape ничего не работает, а точка заменяется :(. Подскажите, что не так в коде
 
попробуйте добавить следующие строки:  
commandbuttonOK.default=true' для ОК  
commandbuttonESC.cancel=true' для Отмыны  
 
газвания только поменяйте
 
commandbuttonOK.default=true - подошло, но теперь после ввода первого значения, курсор не фиксируется на TextBox1. За это вроде отвечает  
Me.TextBox1.SetFocus  
Раньше было    
If KeyCode = vbKeyReturn Then  
Me.CommandButton1 = True  
Me.TextBox1.SetFocus  
Exit Sub  
и все с этим было в порядке. Теперь не знаю куда приткнуть этот Me.TextBox1.SetFocus. Сюда  
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)  
Me.TextBox1.SetFocus  
CommandButton1.Default = True    
CommandButton2.Cancel = True  
If KeyAscii = Asc(",") Then KeyAscii = Asc(".")  
End Sub  
Не работает  
 
commandbuttonESC.cancel=true - это не то, оно сначала стирает то значение, которое ввели в TextBox1, и только повторным нажатием закрывает окно, а нужно чтобы сразу закрывало и значение в нем оставалось
Страницы: 1
Читают тему
Наверх