Страницы: 1
RSS
Ошибка 1004 при сравении данных из ячейки и textbox'а
 
Здравствуйте. Есть пользовательская форма, в ней есть textbox'ы, в них данные - цифры или буквы. Есть необходимость сравнить значение в textbox'е со значением какой то ячейки на листе (через if ... then). Для каждого textbox'а провожу сравнение через цикл (от 1 до 10 через for each, соответственно в каждой ячейке или буквы или цифры). Возникает следующая проблема - если в textbox'е буквы (латинские), то все нормально, а если число, то возникает указанная ошибка 1004.
Textbox'ы не умеют работать с цифрами?

   
Кусок кода которым делаю перебор (ищем пока не найдем значение в textbox'е):

счет2:
   xColumn = xColumn + 1
   If Workbooks("справочник для калькулятора.xlsx").Worksheets("Лист1").Cells(xRow, xColumn).Value <> UserForm1.Controls("TextBox" & i).Value Then GoTo счет2


xColumn - номер столбца в справочной таблице
i - порядковый номер textbox'a

P.s.: так же есть 1 ячейка где буквы вперемешку с цифрами, там все хорошо
Изменено: cheka282 - 30.03.2020 11:08:37
 
cheka282, здравствуйте
Цитата
cheka282: Textbox'ы не умеют работать с цифрами?
скорее всего, TB видит число, как текст, то есть не 2, а "2", поэтому и сравнение не проходит. Сравнивать нужно подобное, поэтому либо оба в текст переводить, либо в число (в примере ниже это делает тип переменной)
Код
Sub TBcheck ()
…
Dim valSh#, valTB#
…
valSh=Workbooks("справочник для калькулятора.xlsx").Worksheets("Лист1").Cells(xRow, xColumn).Value
valTB=UserForm1.Controls("TextBox" & i).Value
If valSh <> valTB Then GoTo счет2
…
End Sub
Изменено: Jack Famous - 30.03.2020 11:06:45
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Перевел везде где только можно в текст (формат ячеек текстовый) - результат нулевой
 
Цитата
cheka282: формат ячеек текстовый
это не всегда значит перевести в текст — делайте файл-пример, если мой код не помог
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Переделал как у вас - пишет ошибку type mismatch и ссылается на строчку 5 (у вас). Может еще что то добавить надо?

Пробовал в вашем коде менять # на as variant - 1004

У меня еще есть вариант - поменять во всей таблице числа на буквы + цифры, проверил - вариант рабочий. Если проще ничего не придумать, значит на нем и остановлюсь, наверное.
Изменено: cheka282 - 30.03.2020 11:44:53
 
Цитата
Jack Famous написал:
делайте файл-пример
 
Цитата
cheka282 написал:
Textbox'ы не умеют работать с цифрами?
вам удалось внести цифры в текстбоксы? вывод сделаете сами или помочь:(Текстбоксы как раз умеют, а вы - нет)
без файла примера эта переписка может затянуться не на один день
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
2 программы: первая для цифры, вторая для буквы. По смыслу идентичны. Запускаем первую - не работает, вторую - работает.
Изменено: cheka282 - 30.03.2020 12:01:14
 
Цитата
Ігор Гончаренко написал:
вам удалось внести цифры в текстбоксы? вывод сделаете сами или помочь:(Текстбоксы как раз умеют, а вы - нет)
без файла примера эта переписка может затянуться не на один день
А что не так с этим? Нонсенс какой-то?

В рабочем файле цифры из одной таблицы вносятся в textbox'ы на форме, затем значение из textbox'a сравниваются с цифрами из другой таблицы, где эти значения такие же цифры. Я не вижу противоречия, разве что "тип" данных где-то в процессе переноса данных меняется.
Изменено: cheka282 - 30.03.2020 12:08:43
 
Код
Sub test1()
  Dim valSh, valTB As Variant
  valSh = Workbooks("Êíèãà1.xlsm").Worksheets("Ëèñò1").Cells(1, 1).Value
  valTB = UserForm1.TextBox1.Value
  MsgBox "type from cells(1,1) = " & TypeName(valSh) & vbLf & _
  "type from TextBox = " & TypeName(valTB) & vbLf & vbLf & _
  TypeName(valSh) & "  <>  " & TypeName(valTB) & " !"
  If valSh = valTB Then MsgBox "right"
  If CStr(valSh) = valTB Then MsgBox "1 Convert to Strig = ""1""" & vbLf & vbLf & """1"" = ""1"""
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
cheka282, следует помнить, что в TextBox всегда ТЕКСТ. В ComboBox и ListBox  аналогично.
 
Добрый день. В VBA с неявным преобразованием типов далеко не все очевидно. Если определить ValTB в #8 как "String", то всё неожиданно заработает.
Разумеется, лучше использовать явные преобразования:
Код
Sub test1()
  Dim valTB
  valTB = UserForm1.TextBox1.Value
  If IsNumeric(valTB) Then
    valTB = CDbl(valTB) ' преобразовали в Double
  Else  ' в Textbox введено не число
    ' ...
  End If
End Sub
Изменено: sokol92 - 30.03.2020 17:37:58
Владимир
 
Всем спасибо за советы!

valTB = CDbl(valTB) - эта штука сработала
Страницы: 1
Наверх