powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel, VBA - сравнение содержимого в TextBox
9 сообщений из 9, страница 1 из 1
Excel, VBA - сравнение содержимого в TextBox
    #33908449
Stagiere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем!
Я работаю в Excel и создала окошко (UserForm) для заполнения в ней некоторой информации.
Никто не сталкивался со сравнением значений TextBox в форме?
Код примерно такой:

Код: plaintext
1.
2.
3.
If (TextBoxUSLR.Value <= TextBoxUCLR.Value) Then
    TextBoxUSLR.Value =  1 . 01  * TextBoxUCLR.Value
End If

То есть если пользователь вводит USLR меньше UCLR, я его насильно делаю на один процент выше UCLR.
Проблема в сравнении. В TextBox'ах информация должна быть в текстовой форме, я так полагаю . То есть, когда я получаю заполненные юзером циферки и посылаю их на лист Эксель, все конвертируется в цифровой формат автоматически, так как потом сложения и вычитания проходят корректно. Но вот беда: не могу я произвести корректно сравнение в VBA среде. Он не видит, что 99<100 и рассматривает 100 как меньшее число(ну, в общем, число знаков в цифре неодинаковое = дает не правильный результат сравнения). Когда же я насильно конвертирую содержание текстовой ячейки в форме, он мне вообще неизвестно что выдает... Пробовала
Код: plaintext
Asc(TextBoxUSLR.Value )
Такое впечатление, что он воспринимает то же 1.01 как 101 = 7 или 1.01 = 1*2^0-(2^(-1)+1*2^(-2)). Резальтаты, в общем, необъяснимые.

Так какой же тип данных в этих TextBox и какую функцию можно использовать, чтобы представить их содержимое как числа и правильно их сравнивать?
...
Рейтинг: 0 / 0
Excel, VBA - сравнение содержимого в TextBox
    #33908534
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тебе нужно воспользоваться одной из функций преобразования типов: CInt, CLng, CSng, CDbl.

Код: plaintext
1.
2.
    If (CLng(TextBoxUSLR.Value) <= CLng(TextBoxUCLR.Value)) Then
        TextBoxUSLR.Value =  1 . 01  * CLng(TextBoxUCLR.Value)
    End If
...
Рейтинг: 0 / 0
Excel, VBA - сравнение содержимого в TextBox
    #33908692
Stagiere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ура! Работает! Спасибо огромное!!!
...
Рейтинг: 0 / 0
Excel, VBA - сравнение содержимого в TextBox
    #33908950
Stagiere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только у меня теперь другая проблема. Не понимаю почему...
Когда цыфры в TextBox берутся из ячеек эксель, а не вводятся пользователем, мне выдается ошибка в строке сравнения (Type mismatch):
Код: plaintext
1.
2.
3.
4.
5.
6.
TextBoxUCLX.Value = CSng(Sheet4.Range("UCLxDin").Value)
TextBoxUCLR.Value = CSng(Sheet4.Range("UCLrDin").Value)

If (CSng(TextBoxUSLX.Value) <= CSng(TextBoxUCLX.Value)) Then
   TextBoxUSLX.Value =  1 . 01  * CSng(TextBoxUCLX.Value)         
End If
...
Рейтинг: 0 / 0
Excel, VBA - сравнение содержимого в TextBox
    #33909013
Stagiere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вернее не
Код: plaintext
1.
2.
TextBoxUCLX.Value = CSng(Sheet4.Range("UCLxDin").Value)
TextBoxUCLR.Value = CSng(Sheet4.Range("UCLrDin").Value)
а
Код: plaintext
1.
2.
TextBoxUCLX.Value = CSng(Sheet4.Range("UCLxDin").Value)
TextBoxUSLX.Value = CSng(Sheet4.Range("USLX").Value)

(где в UCLxDin считается результат по формуле, но представлен в той же числовой форме, что и USLX)
...
Рейтинг: 0 / 0
Excel, VBA - сравнение содержимого в TextBox
    #33909082
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stagiereмне выдается ошибка в строке сравнения (Type mismatch):Сравнение здесь не при чем. Это сам CSng так ругается если не смог преобразовать текст в число.
Вариант 1: Замени CSng на Val. Тогда текст не распознаный как число будет превращаться в ноль без ругани.
Вариант 2: Воспользуйся перехватом ошибок
...
Рейтинг: 0 / 0
Excel, VBA - сравнение содержимого в TextBox
    #33910515
Stagiere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за советы, начало работать(странно, это же вчера не работало)

А можно поподробнее с перехватом ошибок?

Не подскажете, чтобы учесть так же негативные значения, какую можно функцию в VBA использовать, ну, типа IsNegative() (не нашла такой).

Или если она не существует, то как написать функцию, которая возвращала бы число. Так как "return a" не распознает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub TheSigne(TxtB As TextBox)
      If(TxtB.Value< 0 ) Then
              a =  1 . 01 
      Else
              a= 0 . 99 
      End If

      Return a
End Sub

Как правильно записать строчку с возвращением?

P.S.Никто не в курсе, есть ли в VBA такая функция, которая могла бы распознавать размер экрана, как, например, в Java?
...
Рейтинг: 0 / 0
Excel, VBA - сравнение содержимого в TextBox
    #33910682
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IsNegative - нет такой функции.

Можешь так сделать.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private a As Double

Private Sub CommandButton1_Click()
    TheSigne TextBox1
    
    MsgBox a
End Sub

Private Sub TheSigne( _
  TxtB As MSForms.TextBox)
    If (TxtB.Value <  0 ) Then
        a =  1 . 01 
    Else
        a =  0 . 99 
    End If
End Sub

Или следующим образом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub CommandButton1_Click()
    MsgBox TheSigne(TextBox1)
End Sub

Private Function TheSigne( _
  TxtB As MSForms.TextBox) As Double
    If (TxtB.Value <  0 ) Then
        TheSigne =  1 . 01 
    Else
        TheSigne =  0 . 99 
    End If
End Function

Или еще так можно определить отрицательное число.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function fnIsNegative( _
  dblValue As Double) As String
    If Sgn(dblValue) = - 1  Then
        fnIsNegative = "Число отрицательное."
    ElseIf Sgn(dblValue) =  0  Then
        fnIsNegative = "Ноль."
    ElseIf Sgn(dblValue) =  1  Then
        fnIsNegative = "Число положительное."
    End If
End Function


Под размером ты подразумеваешь разрешение экрана? Тогда воспользуйся функцией Win API GetSystemMetrics.
...
Рейтинг: 0 / 0
Excel, VBA - сравнение содержимого в TextBox
    #33910839
Stagiere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О! Sgn() - то, что нужно. Спасибочки большое!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel, VBA - сравнение содержимого в TextBox
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]