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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 21:29   #1
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию преобразование текста в строку

добрый день,уважаемые форумчане.сделал свою функцию по обработке ввода чисел в Textbox и в результате хочу получить числовое значение функции либо single либо double
Код:
Function vvod_tolko_cifr(zna4 As String)
zna4 = Replace(Trim(zna4), ",", ".")
If Len(zna4) > 15 Then
    zna4 = Left(zna4, 15)
End If
If Len(zna4) > 0 Then
    For i = Len(zna4) To 1 Step -1
        Select Case i
            Case Is > 1
                If (Not Mid(zna4, i, 1) Like "#" And (Not Mid(zna4, i, 1) Like "." Or InStr(zna4, ".") < i)) Or (Mid(zna4, i - 1, 2) = "00" And InStr(zna4, ".") = 0 And Val(Left(zna4, 2)) = 0) Then 'E+
                    zna4 = Left(zna4, i - 1) & Mid(zna4, i + 1, Len(zna4))
                End If
            Case 1
                If Not Mid(zna4, i, 1) Like "#" And Not Mid(zna4, i, 1) Like "-" Then
                    zna4 = Left(zna4, i - 1) & Mid(zna4, i + 1, Len(zna4))
                End If
        End Select
    Next i
End If
vvod_tolko_cifr = zna4
If Val(zna4) <> 0 Then
    vvod_tolko_cifr = CDbl(zna4)
End If
End Function
понимаю что ошибка где то в последнем цикле,но уже все перепробовал.подскажите как правильно сделать
Composter вне форума Ответить с цитированием
Старый 29.05.2011, 21:36   #2
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

Composter вам нужно что бы пользователь вводил только цифры?
WizarD.89 вне форума Ответить с цитированием
Старый 29.05.2011, 21:59   #3
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

нужно что бы была возможность вводить как положительные так и отрицательные числа,так и дробные числа.знаю что можно сделать через KeyPress ,но все равно благодаря ему можно в середину ввести - либо вторую точку.
Composter вне форума Ответить с цитированием
Старый 29.05.2011, 22:13   #4
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

дробные числа это 3,5 или 1/2?
WizarD.89 вне форума Ответить с цитированием
Старый 29.05.2011, 22:21   #5
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

в виде десятичных дробей
Composter вне форума Ответить с цитированием
Старый 29.05.2011, 22:25   #6
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

вот вам решение задачи

Код:
Function vvod_tolko_cifr(zna4 As String)
Dim test As Double
On Error Resume Next
Err.Number = 0
test = val(zna4)
If Err.Number = 0 Then
vvod_tolko_cifr = test
Else
vvod_tolko_cifr = ""
End If
End Function

Последний раз редактировалось WizarD.89; 29.05.2011 в 22:40.
WizarD.89 вне форума Ответить с цитированием
Старый 29.05.2011, 22:32   #7
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

спасибо,а как сделать чтобы и отрицательные числа можно вводить?
Composter вне форума Ответить с цитированием
Старый 29.05.2011, 22:40   #8
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

так отрицательные тоже можно вводить
WizarD.89 вне форума Ответить с цитированием
Старый 29.05.2011, 22:45   #9
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

странно ,у меня не получается
Код:
Private Sub TextBox1_Change()
    TextBox1.Text = vvod_tolko_cifr(TextBox1.Text)
End Sub
в texbox не вводится минус
Composter вне форума Ответить с цитированием
Старый 29.05.2011, 23:30   #10
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Не надо проверку по Change делать.
Если добавите в код формы эту процедуру, юзер не сможет выйти из редактирования текстбокса, пока там не будет число:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = Not IsNumeric(TextBox1)
End Sub

При желании можно добавить сообщение, окрашивание текстбокса в красный и т.п.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
преобразование 32-ух битного int в строку _ILYA_ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 13.11.2010 23:09
преобразование 32-битного int в строку _ILYA_ Общие вопросы C/C++ 1 07.11.2010 15:42
Преобразование даты в пустую строку insense БД в Delphi 6 02.07.2010 09:13
Преобразование числа в строку )Игнат( Общие вопросы Delphi 6 06.07.2008 09:32
преобразование денег в строку chekanoff Microsoft Office Excel 3 17.03.2008 04:52