Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Запрет ввода в TextBox данных, кроме чисел - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вопросы по VB, VBS, VB.net » Запрет ввода в TextBox данных, кроме чисел (Word)
Запрет ввода в TextBox данных, кроме чисел
vdekameron Дата: Четверг, 18.12.2014, 10:39 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
В VB нужно сделать запрет на ввод любых данных , кроме чисел. До этого пользовался IsNumeric. А сейчас не подходит, так как эта функция блокирует дробные числа, разделенные точкой, считая их не цифрой. А у меня в проекте для удобства пользователей дробные можно вводить с точкой или с запятой. Заранее спасибо!
 
Ответить
СообщениеВ VB нужно сделать запрет на ввод любых данных , кроме чисел. До этого пользовался IsNumeric. А сейчас не подходит, так как эта функция блокирует дробные числа, разделенные точкой, считая их не цифрой. А у меня в проекте для удобства пользователей дробные можно вводить с точкой или с запятой. Заранее спасибо!

Автор - vdekameron
Дата добавления - 18.12.2014 в 10:39
Саня Дата: Четверг, 18.12.2014, 16:59 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
[vba]
Код
Option Explicit
Private mbExitEvent As Boolean
Private msText As String

Private Sub Text1_Change()
        If mbExitEvent Then Exit Sub    ' зацикливание

      Dim sVal As String, dVal As Double
      sVal = Text1.Text
      If Len(sVal) = 0 Then  
          msText = ""
          Exit Sub
      End If
        
      sVal = Replace(sVal, ".", ",")
      Select Case True
        Case sVal Like ",*": sVal = "0" & sVal
        Case sVal Like "*,": sVal = sVal & "0"
        End Select             
            
        If IsNumeric(sVal) Then
            msText = Text1.Text
        Else
            mbExitEvent = True
            Text1.Text = msText
        End If         
            
        dVal = Val(Replace(sVal, ",", "."))
        Me.Caption = dVal * 2
            
        mbExitEvent = False
End Sub
[/vba]
 
Ответить
Сообщение[vba]
Код
Option Explicit
Private mbExitEvent As Boolean
Private msText As String

Private Sub Text1_Change()
        If mbExitEvent Then Exit Sub    ' зацикливание

      Dim sVal As String, dVal As Double
      sVal = Text1.Text
      If Len(sVal) = 0 Then  
          msText = ""
          Exit Sub
      End If
        
      sVal = Replace(sVal, ".", ",")
      Select Case True
        Case sVal Like ",*": sVal = "0" & sVal
        Case sVal Like "*,": sVal = sVal & "0"
        End Select             
            
        If IsNumeric(sVal) Then
            msText = Text1.Text
        Else
            mbExitEvent = True
            Text1.Text = msText
        End If         
            
        dVal = Val(Replace(sVal, ",", "."))
        Me.Caption = dVal * 2
            
        mbExitEvent = False
End Sub
[/vba]

Автор - Саня
Дата добавления - 18.12.2014 в 16:59
RAN Дата: Четверг, 18.12.2014, 19:34 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Саня, :D
vdekameron, в следующий раз, (если не задумываетесь), получите аналогичное. (Или ничего)
[vba]
Код
Private Sub ВерхнийБ_KeyPress(KeyAscii As Integer)
     Select Case KeyAscii
     Case 48 To 57: KeyAscii = KeyAscii
     Case 46, 44: KeyAscii = 46
     Case Else: KeyAscii = 0
     End Select
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеСаня, :D
vdekameron, в следующий раз, (если не задумываетесь), получите аналогичное. (Или ничего)
[vba]
Код
Private Sub ВерхнийБ_KeyPress(KeyAscii As Integer)
     Select Case KeyAscii
     Case 48 To 57: KeyAscii = KeyAscii
     Case 46, 44: KeyAscii = 46
     Case Else: KeyAscii = 0
     End Select
End Sub
[/vba]

Автор - RAN
Дата добавления - 18.12.2014 в 19:34
vdekameron Дата: Пятница, 19.12.2014, 10:08 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Саня, Интересный очень вариант. Но есть один недочет. Как быть если записал число 12345 а потом стереть его хочешь а цифру 1 не получается стереть :D Она возвращается каждый раз после
[vba]
Код
mbExitEvent = True
           Text1.Text = msText
[/vba]

[moder]потому что 1 - это священное число :)

поправил вверху[/moder]
 
Ответить
СообщениеСаня, Интересный очень вариант. Но есть один недочет. Как быть если записал число 12345 а потом стереть его хочешь а цифру 1 не получается стереть :D Она возвращается каждый раз после
[vba]
Код
mbExitEvent = True
           Text1.Text = msText
[/vba]

[moder]потому что 1 - это священное число :)

поправил вверху[/moder]

Автор - vdekameron
Дата добавления - 19.12.2014 в 10:08
vdekameron Дата: Пятница, 19.12.2014, 10:20 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
RAN, стереть число нельзя
 
Ответить
СообщениеRAN, стереть число нельзя

Автор - vdekameron
Дата добавления - 19.12.2014 в 10:20
vdekameron Дата: Пятница, 19.12.2014, 11:37 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Точно))) 1- святое число))) Теперь ввожу 12345, стираю и когда ввожу не число а например букву "р" то вуаля, появляется еденичка :D

[moder]поправил вверху
это финальная версия от меня.
Все дополнительные "нюансы" исправляй уже сам (думаю, это не сложно будет, если разберешься с уже написанным)[/moder]
 
Ответить
СообщениеТочно))) 1- святое число))) Теперь ввожу 12345, стираю и когда ввожу не число а например букву "р" то вуаля, появляется еденичка :D

[moder]поправил вверху
это финальная версия от меня.
Все дополнительные "нюансы" исправляй уже сам (думаю, это не сложно будет, если разберешься с уже написанным)[/moder]

Автор - vdekameron
Дата добавления - 19.12.2014 в 11:37
vdekameron Дата: Пятница, 19.12.2014, 11:50 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Разберусь! Спасибо! :)
 
Ответить
СообщениеРазберусь! Спасибо! :)

Автор - vdekameron
Дата добавления - 19.12.2014 в 11:50
RAN Дата: Пятница, 19.12.2014, 12:02 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
стереть число нельзя

Del можно. :)
А чтобы и bksp работала, нужно добавить 1 цифирьку, и 1 запятую.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
стереть число нельзя

Del можно. :)
А чтобы и bksp работала, нужно добавить 1 цифирьку, и 1 запятую.

Автор - RAN
Дата добавления - 19.12.2014 в 12:02
vdekameron Дата: Пятница, 19.12.2014, 15:28 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
RAN, Да я понял смысл вашего кода)) И вам спасибо!! Столько вариантов предложили, бери да выбирай любой) :)
 
Ответить
СообщениеRAN, Да я понял смысл вашего кода)) И вам спасибо!! Столько вариантов предложили, бери да выбирай любой) :)

Автор - vdekameron
Дата добавления - 19.12.2014 в 15:28
vdekameron Дата: Вторник, 23.12.2014, 12:46 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Саня, Закинул уже в свой проект ваш код. Тестирую. Все бы ничего, но только еще один маленький косяк нашел. Конечно он никак не влияет на результат, но все же. В текстовое поле можно ввести знак "+" и "-" после цифр ( до цифр нельзя но мне и не нужно, значения там не могут быть отрицат. это только на руку)
Если есть время напишите пожалуйста дополнение к коду. Если это конечно можно сделать. Заранее спасибо
 
Ответить
СообщениеСаня, Закинул уже в свой проект ваш код. Тестирую. Все бы ничего, но только еще один маленький косяк нашел. Конечно он никак не влияет на результат, но все же. В текстовое поле можно ввести знак "+" и "-" после цифр ( до цифр нельзя но мне и не нужно, значения там не могут быть отрицат. это только на руку)
Если есть время напишите пожалуйста дополнение к коду. Если это конечно можно сделать. Заранее спасибо

Автор - vdekameron
Дата добавления - 23.12.2014 в 12:46
Саня Дата: Вторник, 23.12.2014, 15:10 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
[vba]
Код
        If IsNumeric(sVal) Then
             msText = Text1.Text
         Else
             mbExitEvent = True
             Text1.Text = msText
         End If  
[/vba]

замени на это:
[vba]
Код
        If Not IsNumeric(sVal) Or Right$(sVal, 1) = "+" Or Right$(sVal, 1) = "-" Then
             mbExitEvent = True
             Text1.Text = msText
         Else
             msText = Text1.Text
         End If
[/vba]
 
Ответить
Сообщение[vba]
Код
        If IsNumeric(sVal) Then
             msText = Text1.Text
         Else
             mbExitEvent = True
             Text1.Text = msText
         End If  
[/vba]

замени на это:
[vba]
Код
        If Not IsNumeric(sVal) Or Right$(sVal, 1) = "+" Or Right$(sVal, 1) = "-" Then
             mbExitEvent = True
             Text1.Text = msText
         Else
             msText = Text1.Text
         End If
[/vba]

Автор - Саня
Дата добавления - 23.12.2014 в 15:10
vdekameron Дата: Вторник, 23.12.2014, 15:39 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Саня, Помудился сам. :) Вот как у меня получилось)) Может это я сделал через одно место) Но главное ведь результат. И заодно я сделал так, чтобы после того как ввел число и переместил курсор в начало числа нельзя было тоже "+" или "-" влупить <_< Только если можно посмотрите, может у вас замечание есть какие-то и я что-то не учел. Но проверял, работает.[vba]
Код
Option Explicit
Private Vihod As Boolean
Dim P1 As String, P2 As String
Dim KolS As Integer
Dim Simvol As String

Private Sub Text1_Change()
         If Vihod Then Exit Sub    ' зацикливание

     Dim Val1 As String, Val2 As Double
     Val1 = Text1.Text
     If Len(Val1) = 0 Then
         P1 = ""
         Exit Sub
     End If
          
     Val1 = Replace(Val1, ".", ",")
     Select Case True
         Case Val1 Like ",*": Val1 = "0" & Val1
         Case Val1 Like "*,": Val1 = Val1 & "0"
         End Select
              
         If IsNumeric(Val1) Then
             P1 = Text1.Text
                KolS = Len(P1)
                   Simvol = Mid(P1, KolS, 1)
             Select Case Simvol
                 Case "+": P1 = Replace(P1, Simvol, ""): Text1.Text = P1
                 Case "-": P1 = Replace(P1, Simvol, ""): Text1.Text = P1
             End Select
                   Simvol = Mid(P1, 1, 1)
             Select Case Simvol
                 Case "+": P1 = Replace(P1, Simvol, ""): Text1.Text = P1
                 Case "-": P1 = Replace(P1, Simvol, ""): Text1.Text = P1
             End Select
         Else
             Vihod = True
             
             Text1.Text = P1
         End If
              
         Val2 = Val(Replace(Val1, ",", "."))
         Text1.SelStart = Len(Text1)
         Me.Caption = Val2 * 2
        
              
         Vihod = False
End Sub
[/vba]
 
Ответить
СообщениеСаня, Помудился сам. :) Вот как у меня получилось)) Может это я сделал через одно место) Но главное ведь результат. И заодно я сделал так, чтобы после того как ввел число и переместил курсор в начало числа нельзя было тоже "+" или "-" влупить <_< Только если можно посмотрите, может у вас замечание есть какие-то и я что-то не учел. Но проверял, работает.[vba]
Код
Option Explicit
Private Vihod As Boolean
Dim P1 As String, P2 As String
Dim KolS As Integer
Dim Simvol As String

Private Sub Text1_Change()
         If Vihod Then Exit Sub    ' зацикливание

     Dim Val1 As String, Val2 As Double
     Val1 = Text1.Text
     If Len(Val1) = 0 Then
         P1 = ""
         Exit Sub
     End If
          
     Val1 = Replace(Val1, ".", ",")
     Select Case True
         Case Val1 Like ",*": Val1 = "0" & Val1
         Case Val1 Like "*,": Val1 = Val1 & "0"
         End Select
              
         If IsNumeric(Val1) Then
             P1 = Text1.Text
                KolS = Len(P1)
                   Simvol = Mid(P1, KolS, 1)
             Select Case Simvol
                 Case "+": P1 = Replace(P1, Simvol, ""): Text1.Text = P1
                 Case "-": P1 = Replace(P1, Simvol, ""): Text1.Text = P1
             End Select
                   Simvol = Mid(P1, 1, 1)
             Select Case Simvol
                 Case "+": P1 = Replace(P1, Simvol, ""): Text1.Text = P1
                 Case "-": P1 = Replace(P1, Simvol, ""): Text1.Text = P1
             End Select
         Else
             Vihod = True
             
             Text1.Text = P1
         End If
              
         Val2 = Val(Replace(Val1, ",", "."))
         Text1.SelStart = Len(Text1)
         Me.Caption = Val2 * 2
        
              
         Vihod = False
End Sub
[/vba]

Автор - vdekameron
Дата добавления - 23.12.2014 в 15:39
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вопросы по VB, VBS, VB.net » Запрет ввода в TextBox данных, кроме чисел (Word)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!