Помогаем и разъясняем взаимодействие с ПО Ворд и Эксель на WordExceler.ru
Excel vba if textbox1
ГЛАВНАЯ
ТРЕНИНГИ
Быстрый старт
Расширенный Excel
Мастер Формул
Прогнозирование
Визуализация
Макросы на VBA
КНИГИ
Готовые решения
Мастер Формул
Скульптор данных
ВИДЕОУРОКИ
ПРИЕМЫ
Бизнес-анализ
Выпадающие списки
Даты и время
Диаграммы
Диапазоны
Дубликаты
Защита данных
Интернет, email
Книги, листы
Макросы
Сводные таблицы
Текст
Форматирование
Функции
Всякое
PLEX
Коротко
Подробно
Версии
Вопрос-Ответ
Скачать
Купить
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
Техническая поддержка сайта
ООО «Планета Эксел»
ИНН 7735603520
ОГРН 1147746834949
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071
I have been trying to figure this out for the past hour and I don’t understand what I am doing wrong. I have a userform with a textbox. This textbox is grabbing a value from an excel spreadsheet only when a cell in an excel sheet says yes. Otherwise if the cell says no I need the user to input a number. I have this code in now. The problem is that when the cell says «No», and I type into the textbox, the textbox automatically deletes what i type in…Im assuming this is because of the «». Any help would be greatly appreciated, thank you!
Private Sub TextBox1_AfterUpdate()
If Worksheets(«Sec. 8»).Range(«J15»).Value = «Yes» And Worksheets(«Sec. 8»).Range(«J16»).Value = «Yes» Then
TextBox1.Value = Worksheets(«Sec. 8»).Range(«F17»)
ElseIf Worksheets(«Sec. 8»).Range(«J15»).Value = «Yes» Then
TextBox1.Value = Worksheets(«Sec. 8»).Range(«F15»)
ElseIf Worksheets(«Sec. 8»).Range(«J16»).Value = «Yes» Then
TextBox1.Value = Worksheets(«Sec. 8»).Range(«F16»)
ElseIf Worksheets(«Sec. 8»).Range(«J15»).Value = «No» Then
TextBox1.Value = «»
ElseIf Worksheets(«Sec. 8»).Range(«J16»).Value = «No» Then
TextBox1.Value = «»
End If
Значения TextBox(UserForm) в массив и проверить совпадения
EvgenyD
Дата: Среда, 01.10.2014, 00:28 |
Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 74
Репутация: 19 ±
Замечаний:
0% ±
Excel 2013
Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, решить 2 задачи: 1. Поместить в массив значения из TextBox (находятся на UserForm) 2. Проверить уникальность каждого значения массива относительно остальных
Первое пытался сделать, но выводятся только имена Текстбоксов, второе для меня пока загадка. Всего второй месяц изучаю VBA в Excel, заклинило что-то
Ответить
wild_pig
Дата: Среда, 01.10.2014, 08:52 |
Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 516
Репутация: 97 ±
Замечаний:
0% ±
2003, 2013
Проверить уникальность каждого значения массива относительно остальных
2 текстбокса, что тут проверять? А может это упрощённый пример и текстбоксов гораздо больше?
Ответить
EvgenyD
Дата: Среда, 01.10.2014, 14:23 |
Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 74
Репутация: 19 ±
Замечаний:
0% ±
Excel 2013
Понятное дело упрощенный . Иначе вопрос не имеет смысла. Я обычно так «изобретаю велосипед» чтобы не в итоговом файле, сделаю, проверю, а потом уже в общий файл прилепляю. Там форма с переменным количеством текстбоксов, тестбоксы создаются при выполнении макроса. Может по этому никто не отвечает, т.к. не поняли что это упрощенный вариант (тогда страшно представить что обо мне подумали).
Ответить
wild_pig
Дата: Среда, 01.10.2014, 15:05 |
Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 516
Репутация: 97 ±
Замечаний:
0% ±
2003, 2013
Ответить
EvgenyD
Дата: Среда, 01.10.2014, 16:57 |
Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 74
Репутация: 19 ±
Замечаний:
0% ±
Excel 2013
wild_pig, спасибо за ссылку, я ее читал, пробовал но не получалось, а сегодня вдруг заработало. Получилось для занесения в массив значений TextBox использую [vba]
Код
For i = 1 To 3 MyArray(i) = Controls(«TextBox» & i).Value Next i
[/vba]
Кстати, почему-то при указании UserForm1.Controls… работает не корректно, а так Controls(«TextBox» & i).Value работает.
Для выявления повторений в массиве сделал так: [vba]
Код
Z = 0 For y = 1 To 3 Fd = MyArray(y) Arr = MyArray() x = WorksheetFunction.Match(Fd, Arr, 0) If x <> y Then Z = Z + 1 End If Next y MsgBox Z
[/vba] Если Z выдает >0 то есть повторы. Для моих потребностей этого достаточно. Имеет право на жизнь такая конструкция или как-то по другому можно, не подскажите?
Ответить
wild_pig
Дата: Среда, 01.10.2014, 18:04 |
Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 516
Репутация: 97 ±
Замечаний:
0% ±
2003, 2013
Судя по коду в примере хотелось проверить заполненность полей? [vba]
Код
Private Sub CommandButton1_Click() Dim tBox As Control For Each tBox In UserForm1.Controls If TypeOf tBox Is MSForms.TextBox Then If tBox.Value = «» Then MsgBox «Не тупи, заполни поле «»» & tBox.Name & «»»» tBox.SetFocus Exit For End If End If Next End Sub
[/vba]
Ответить
EvgenyD
Дата: Среда, 01.10.2014, 18:46 |
Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 74
Репутация: 19 ±
Замечаний:
0% ±
Excel 2013
Да, у меня поприметивнее написано, но работает ), вот SetFocus искал, т.к. при незаполненом перескакивал на следующее, а хотелось, чтобы курсор вставал в незаполненый Textbox. Сейчас как раз доделал файл для которого выяснял ответ в данной теме. Будет понятно что я хотел сделать. Код там написан топорно, пока только так могу, буду со временем (и с опытом) «вылизывать». Первой доработкой будет замена моего кода проверки на пустоту на Ваш. Т.к. у меня для каждого TextBox своя процедура, хоть и написана циклом. Но вроде все работает как хотел.
Там не обработано событие отмены и проверка значений Inputbox (можно например букву ввести), т.к. это будет доделано в составе другого файла. (эта форма тоже часть моего учебного файла).
К сообщению приложен файл:
8330871.xlsm
(45.3 Kb)
Ответить
VictorM
Дата: Среда, 12.08.2015, 20:22 |
Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 161
Репутация: 27 ±
Замечаний:
0% ±
Цитата
Судя по коду в примере хотелось проверить заполненность полей?
Здравствуйте, Уважаемые! Применил этот код из Сообщения № 6 — все отлично! Но вот такой вопрос у меня. Как можно игнорировать проверку заполненности некоторых полей, т.к. они необязательны к заполнению?
Ответить
nilem
Дата: Среда, 12.08.2015, 20:32 |
Сообщение № 9
Группа: Авторы
Ранг: Старожил
Сообщений: 1612
Репутация: 563 ±
Замечаний:
0% ±
Excel 2013, 2016
VictorM, привет можно, например, установить св-во Tag = «eee» (в окне свойств) для полей, обязательных для заполнения. И тогда так [vba]
Код
Private Sub CommandButton1_Click() Dim tBox As Control For Each tBox In Me.Controls If TypeOf tBox Is MSForms.TextBox Then If tBox.Tag = «eee» Then If tBox.Value = «» Then MsgBox «Не тупи, заполни поле «»» & tBox.Name & «»»» tBox.SetFocus Exit For End If End If End If Next End Sub
[/vba]
Яндекс.Деньги 4100159601573
Ответить
Serge_007
Дата: Среда, 12.08.2015, 20:40 |
Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 15888
Репутация: 2623 ±
Замечаний:
±
Excel 2016
игнорировать проверку заполненности некоторых полей, т.к. они необязательны к заполнению?
Привет, Виктор: Более простой вариант (обязательны к заполнению только TextBox1 и TextBox2): [vba]
Код
Private Sub CommandButton1_Click() If Me.TextBox1 = «» Or Me.TextBox2 = «» Then MsgBox «Не тупи, заполни обязательные поля!» TextBox1.SetFocus End If End Sub
[/vba]
ЮMoney:41001419691823 | WMR:126292472390
Ответить
AndreTM
Дата: Среда, 12.08.2015, 20:46 |
Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 498 ±
Замечаний:
0% ±
2003 & 2010
Serge_007, вариант хоть и имеет право на существование но не удовлетворяет условиям задачи никак… Первое, там динамически формируемые текстбоксы, так что и код твоей процедуры придется тоже динамически реформировать, но это ладно… Или — а зачем при незаполненном TextBox2 (и заполненном TextBox1) ставить фокус на TextBox1?
Она вообще осталась от макроса в посте №6
Ты от ответа не уходи — нету в том посте никаких TextBox1.SetFocus
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM — Среда, 12.08.2015, 21:36
Ответить
VictorM
Дата: Среда, 12.08.2015, 20:53 |
Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 161
Репутация: 27 ±
Замечаний:
0% ±
nilem, да, код интересный, буду пробовать, спасибо. Serge_007, такой вариант у меня был задуман с самого начала, НО проверять нужно, допустим, 15-18 текстбоксов и только 2-3 из них необязательные. Получается, что нужно прописывать проверку всех обязательных? муторно это.
Сообщение отредактировал VictorM — Среда, 12.08.2015, 20:56
Ответить
Serge_007
Дата: Среда, 12.08.2015, 20:53 |
Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 15888
Репутация: 2623 ±
Замечаний:
±
Excel 2016
там динамически формируемые текстбоксы
Каюсь — не читал…
Главное — а нафига при незаполненном TextBox2 ставить фокус на TextBox1?
Андрей, в чем тут «Главное«?! Убери эту строку. Ну или поменяй по-другому. Она вообще осталась от макроса в посте №6
проверять нужно, допустим, 15-18 текстбоксов и только 2-3 из них необязательные
Тогда вариант Николая предпочтительнее, конечно
ЮMoney:41001419691823 | WMR:126292472390
Ответить
VictorM
Дата: Среда, 12.08.2015, 20:57 |
Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 161
Репутация: 27 ±
Замечаний:
0% ±
Тогда вариант Николая предпочтительнее, конечно
Да, вот и я решил остановиться на этом варианте. Спасибо всем за помощь!
Иногда появляются ошибки при вводе данных. Наиболее неприятные это случайный ввод букв вместо цыфр, портятся все вычисления, если они есть для данной ячейки. Поэтому считаю актуальным делать для некоторых полей вот такие две проверки:
1. Программа для проверки «Вводятся ли положительные числовые данные?»
Private Sub TextBox1_Change()
If TextBox1.Value < 0 Then
MsgBox «Числа не должны быть отрицательными!», vbOKOnly + vbInformation, «Error»
TextBox1.SetFocus
End If
If Not IsNumeric(TextBox1.Text) And Len(TextBox1) <> 0 Then
MsgBox «Вводить необходимо числовые данные», vbOKOnly + vbInformation, «Error»
TextBox1.Value = «»
TextBox1.SetFocus
End If
End Sub
2. Программа для проверки «Вводятся ли текстовые данные?»
Private Sub TextBox3_Change()
If IsNumeric(TextBox3.Text) And Len(TextBox3) <> 0 Then
MsgBox «Вводить надо текстовые данные!», vbOKOnly + vbInformation, «Error@»
TextBox3.Value = » «
TextBox3.SetFocus
End If
End Sub
Пояснения:
SetFocus – устанавливает фокус на вызвавшем этот метод элементе управления (в данном примере на TextBox). Часто применяется в программах обработки ошибок
IsNumeric – функция проверки типов – является ли переменная числовым значением