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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2011, 17:03   #1
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию цифра или буква

помогите решить такую задачу:
В Textbox1 вводим информацию и вставим ее в заранее виделенной ячейке. Надо сделать так что:

1) Если виделенная ячейка находится в первом столбце то разрешить в эту ячейку всавит текст которий содержит только цифри.

2) Если виделенная ячейка находится во втором столбце то разрешить в эту ячейку всавит текст которий содержит хотья бы одну букву.

3) Если виделенная ячейка находится в третем столбце то разрешить в эту ячейку всавит текст которий содержит только цифри и может быть
одну точку.
roborrr вне форума Ответить с цитированием
Старый 13.03.2011, 13:23   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Как вариант
Код:
Private Sub CommandButton1_Click()
Dim SSl As String, Fl1 As Boolean, Fl2 As Boolean
Dim Col As Integer, Rt, T_count  As Integer
Col = ActiveCell.Column
SSl = TextBox1.Text
Rt = Split(SSl, ".", -1)
T_count = UBound(Rt)
If SSl Like "*[А-яё]*" Or SSl Like "*[A-z]*" Or SSl Like "*,*" Then Fl1 = True
If IsNumeric(SSl) = True And Fl1 = False Then Fl2 = True
Select Case Col
Case 1
If Fl2 = True Then ActiveCell = SSl
Case 2
If Fl1 = True Then ActiveCell = SSl
Case 3
If T_count < 2 And IsNumeric(Replace(SSl, ".", "")) = True And Fl1 = False Then ActiveCell = SSl
End Select
End Sub
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 13.03.2011 в 15:09.
doober вне форума Ответить с цитированием
Старый 13.03.2011, 14:50   #3
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

спасибо! Вы назвали код "как вариант". Я добавил бы слово "Элегантный".
roborrr вне форума Ответить с цитированием
Старый 13.03.2011, 14:59   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Себе бы я делал на регулярных выражениях.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 14.03.2011, 13:45   #5
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Сергей, а если с регулярными
Код:
Private Sub CommandButton1_Click()
Dim ssl As String, Col As Integer
Col = ActiveCell.Column: ssl = Me.TextBox1.Text
With CreateObject("VBScript.RegExp")
    .Global = True
    Select Case Col
        Case 1: .Pattern = "^[0-9]*$"
        Case 2: .Pattern = "[а-яА-Я]"
        Case 3: .Pattern = "^[0-9.]*$"
    End Select
    If .test(ssl) Then ActiveCell = ssl
End With
End Sub
Так правильно? (может, как-то по другому?)
nilem вне форума Ответить с цитированием
Старый 14.03.2011, 14:08   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Да Николай,все правильно,только надо проверять 1 точку.
У тебя срабатываеn на цифры+точки
233.0.0=True
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 14.03.2011 в 14:38.
doober вне форума Ответить с цитированием
Старый 14.03.2011, 14:38   #7
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Код:
Private Sub CommandButton1_Click()

Dim ssl As String, Col As Integer, Fl As Integer
Col = ActiveCell.Column: ssl = Me.TextBox1.Text
 Set RegExp = CreateObject("VBScript.RegExp")
With RegExp
    .Global = True
    Select Case Col
        Case 1
        .Pattern = "^[0-9]*$"
        Case 2: .Pattern =  "[а-яА-Я]"
        Case 3: .Pattern = "\."
          Set objMatches = .Execute(ssl)
          Fl = objMatches.Count
          .Pattern = "^[0-9.]*$"
    End Select
    If .test(ssl) And Fl < 2 Then ActiveCell = ssl
End With
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 14.03.2011, 15:23   #8
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Понял. Оказывается, не просто. Сергей, спасибо за пример.
nilem вне форума Ответить с цитированием
Старый 14.03.2011, 20:38   #9
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

... а если так?
Код:
Case 3: .Pattern = "^[0-9]*\.?[0-9]*$"
ну, чтобы обойтись без objMatches .
nilem вне форума Ответить с цитированием
Старый 14.03.2011, 22:34   #10
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

+5 .....
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler (Как определить число в массиве или буква?) Exelence Помощь студентам 0 05.12.2010 21:13
Определить, какая цифра расположена левее – максимальная или минимальная мария2507 Microsoft Office Excel 4 22.12.2009 16:41
Как проверить гласная или согласная буква? TwiX Общие вопросы Delphi 5 14.12.2009 04:25
Программа, определяющую, какая цифра введена – четная или нечетная. JustinTI Помощь студентам 6 21.12.2008 12:03
Функция определить цифра или нет. dx+ Общие вопросы Delphi 8 26.05.2008 10:59