Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Значения TextBox(UserForm) в массив и проверить совпадения - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Значения TextBox(UserForm) в массив и проверить совпадения (Макросы/Sub)
Значения TextBox(UserForm) в массив и проверить совпадения
EvgenyD Дата: Среда, 01.10.2014, 00:28 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 74
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте, уважаемые форумчане!
Помогите, пожалуйста, решить 2 задачи:
1. Поместить в массив значения из TextBox (находятся на UserForm)
2. Проверить уникальность каждого значения массива относительно остальных

Первое пытался сделать, но выводятся только имена Текстбоксов, второе для меня пока загадка. Всего второй месяц изучаю VBA в Excel, заклинило что-то %)
К сообщению приложен файл: _Microsoft_Exce.xls (31.0 Kb)
 
Ответить
СообщениеЗдравствуйте, уважаемые форумчане!
Помогите, пожалуйста, решить 2 задачи:
1. Поместить в массив значения из TextBox (находятся на UserForm)
2. Проверить уникальность каждого значения массива относительно остальных

Первое пытался сделать, но выводятся только имена Текстбоксов, второе для меня пока загадка. Всего второй месяц изучаю VBA в Excel, заклинило что-то %)

Автор - EvgenyD
Дата добавления - 01.10.2014 в 00:28
wild_pig Дата: Среда, 01.10.2014, 08:52 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
Проверить уникальность каждого значения массива относительно остальных

2 текстбокса, что тут проверять? А может это упрощённый пример и текстбоксов гораздо больше?
 
Ответить
Сообщение
Проверить уникальность каждого значения массива относительно остальных

2 текстбокса, что тут проверять? А может это упрощённый пример и текстбоксов гораздо больше?

Автор - wild_pig
Дата добавления - 01.10.2014 в 08:52
EvgenyD Дата: Среда, 01.10.2014, 14:23 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 74
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Понятное дело упрощенный yes . Иначе вопрос не имеет смысла. Я обычно так "изобретаю велосипед" чтобы не в итоговом файле, сделаю, проверю, а потом уже в общий файл прилепляю. Там форма с переменным количеством текстбоксов, тестбоксы создаются при выполнении макроса.
Может по этому никто не отвечает, т.к. не поняли что это упрощенный вариант (тогда страшно представить что обо мне подумали).
 
Ответить
СообщениеПонятное дело упрощенный yes . Иначе вопрос не имеет смысла. Я обычно так "изобретаю велосипед" чтобы не в итоговом файле, сделаю, проверю, а потом уже в общий файл прилепляю. Там форма с переменным количеством текстбоксов, тестбоксы создаются при выполнении макроса.
Может по этому никто не отвечает, т.к. не поняли что это упрощенный вариант (тогда страшно представить что обо мне подумали).

Автор - EvgenyD
Дата добавления - 01.10.2014 в 14:23
wild_pig Дата: Среда, 01.10.2014, 15:05 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
 
Ответить
СообщениеПочитать

Автор - wild_pig
Дата добавления - 01.10.2014 в 15:05
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, спасибо за ссылку, я ее читал, пробовал но не получалось, а сегодня вдруг заработало. Получилось для занесения в массив значений 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 то есть повторы. Для моих потребностей этого достаточно.
Имеет право на жизнь такая конструкция или как-то по другому можно, не подскажите?

Автор - EvgenyD
Дата добавления - 01.10.2014 в 16:57
wild_pig Дата: Среда, 01.10.2014, 18:04 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 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]
 
Ответить
СообщениеСудя по коду в примере хотелось проверить заполненность полей?
[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]

Автор - wild_pig
Дата добавления - 01.10.2014 в 18:04
EvgenyD Дата: Среда, 01.10.2014, 18:46 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 74
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Да, у меня поприметивнее написано, но работает ), вот SetFocus искал, т.к. при незаполненом перескакивал на следующее, а хотелось, чтобы курсор вставал в незаполненый Textbox. Сейчас как раз доделал файл для которого выяснял ответ в данной теме. Будет понятно что я хотел сделать. Код там написан топорно, пока только так могу, буду со временем (и с опытом) "вылизывать". Первой доработкой будет замена моего кода проверки на пустоту на Ваш. Т.к. у меня для каждого TextBox своя процедура, хоть и написана циклом. Но вроде все работает как хотел.

Там не обработано событие отмены и проверка значений Inputbox (можно например букву ввести), т.к. это будет доделано в составе другого файла. (эта форма тоже часть моего учебного файла).
К сообщению приложен файл: 8330871.xlsm (45.3 Kb)
 
Ответить
СообщениеДа, у меня поприметивнее написано, но работает ), вот SetFocus искал, т.к. при незаполненом перескакивал на следующее, а хотелось, чтобы курсор вставал в незаполненый Textbox. Сейчас как раз доделал файл для которого выяснял ответ в данной теме. Будет понятно что я хотел сделать. Код там написан топорно, пока только так могу, буду со временем (и с опытом) "вылизывать". Первой доработкой будет замена моего кода проверки на пустоту на Ваш. Т.к. у меня для каждого TextBox своя процедура, хоть и написана циклом. Но вроде все работает как хотел.

Там не обработано событие отмены и проверка значений Inputbox (можно например букву ввести), т.к. это будет доделано в составе другого файла. (эта форма тоже часть моего учебного файла).

Автор - EvgenyD
Дата добавления - 01.10.2014 в 18:46
VictorM Дата: Среда, 12.08.2015, 20:22 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 161
Репутация: 27 ±
Замечаний: 0% ±

Цитата
Судя по коду в примере хотелось проверить заполненность полей?

Здравствуйте, Уважаемые!
Применил этот код из Сообщения № 6 - все отлично!
Но вот такой вопрос у меня.
Как можно игнорировать проверку заполненности некоторых полей, т.к. они необязательны к заполнению?
 
Ответить
Сообщение
Цитата
Судя по коду в примере хотелось проверить заполненность полей?

Здравствуйте, Уважаемые!
Применил этот код из Сообщения № 6 - все отлично!
Но вот такой вопрос у меня.
Как можно игнорировать проверку заполненности некоторых полей, т.к. они необязательны к заполнению?

Автор - VictorM
Дата добавления - 12.08.2015 в 20:22
nilem Дата: Среда, 12.08.2015, 20:32 | Сообщение № 9
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 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
 
Ответить
Сообщение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]

Автор - nilem
Дата добавления - 12.08.2015 в 20:32
Serge_007 Дата: Среда, 12.08.2015, 20:40 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

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
 
Ответить
Сообщение
игнорировать проверку заполненности некоторых полей, т.к. они необязательны к заполнению?
Привет, Виктор:
Более простой вариант (обязательны к заполнению только TextBox1 и TextBox2):
[vba]
Код
Private Sub CommandButton1_Click()
     If Me.TextBox1 = "" Or Me.TextBox2 = "" Then
         MsgBox "Не тупи, заполни обязательные поля!"
         TextBox1.SetFocus
         End If
End Sub
[/vba]

Автор - Serge_007
Дата добавления - 12.08.2015 в 20:40
AndreTM Дата: Среда, 12.08.2015, 20:46 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Serge_007, вариант хоть и имеет право на существование :) но не удовлетворяет условиям задачи никак...
Первое, там динамически формируемые текстбоксы, так что и код твоей процедуры придется тоже динамически реформировать, но это ладно... Или - а зачем при незаполненном TextBox2 (и заполненном TextBox1) ставить фокус на TextBox1? :D

Она вообще осталась от макроса в посте №6
Ты от ответа не уходи - нету в том посте никаких TextBox1.SetFocus :)


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Среда, 12.08.2015, 21:36
 
Ответить
СообщениеSerge_007, вариант хоть и имеет право на существование :) но не удовлетворяет условиям задачи никак...
Первое, там динамически формируемые текстбоксы, так что и код твоей процедуры придется тоже динамически реформировать, но это ладно... Или - а зачем при незаполненном TextBox2 (и заполненном TextBox1) ставить фокус на TextBox1? :D

Она вообще осталась от макроса в посте №6
Ты от ответа не уходи - нету в том посте никаких TextBox1.SetFocus :)

Автор - AndreTM
Дата добавления - 12.08.2015 в 20:46
VictorM Дата: Среда, 12.08.2015, 20:53 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 161
Репутация: 27 ±
Замечаний: 0% ±

nilem, да, код интересный, буду пробовать, спасибо.
Serge_007, такой вариант у меня был задуман с самого начала, НО проверять нужно, допустим, 15-18 текстбоксов и только 2-3 из них необязательные.
Получается, что нужно прописывать проверку всех обязательных?
муторно это.


Сообщение отредактировал VictorM - Среда, 12.08.2015, 20:56
 
Ответить
Сообщениеnilem, да, код интересный, буду пробовать, спасибо.
Serge_007, такой вариант у меня был задуман с самого начала, НО проверять нужно, допустим, 15-18 текстбоксов и только 2-3 из них необязательные.
Получается, что нужно прописывать проверку всех обязательных?
муторно это.

Автор - VictorM
Дата добавления - 12.08.2015 в 20:53
Serge_007 Дата: Среда, 12.08.2015, 20:53 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
там динамически формируемые текстбоксы
Каюсь - не читал...

Главное - а нафига при незаполненном TextBox2 ставить фокус на TextBox1?
Андрей, в чем тут "Главное"?! Убери эту строку. Ну или поменяй по-другому. Она вообще осталась от макроса в посте №6

проверять нужно, допустим, 15-18 текстбоксов и только 2-3 из них необязательные
Тогда вариант Николая предпочтительнее, конечно :)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
там динамически формируемые текстбоксы
Каюсь - не читал...

Главное - а нафига при незаполненном TextBox2 ставить фокус на TextBox1?
Андрей, в чем тут "Главное"?! Убери эту строку. Ну или поменяй по-другому. Она вообще осталась от макроса в посте №6

проверять нужно, допустим, 15-18 текстбоксов и только 2-3 из них необязательные
Тогда вариант Николая предпочтительнее, конечно :)

Автор - Serge_007
Дата добавления - 12.08.2015 в 20:53
VictorM Дата: Среда, 12.08.2015, 20:57 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 161
Репутация: 27 ±
Замечаний: 0% ±

Тогда вариант Николая предпочтительнее, конечно

Да, вот и я решил остановиться на этом варианте.
Спасибо всем за помощь!
 
Ответить
Сообщение
Тогда вариант Николая предпочтительнее, конечно

Да, вот и я решил остановиться на этом варианте.
Спасибо всем за помощь!

Автор - VictorM
Дата добавления - 12.08.2015 в 20:57
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Значения TextBox(UserForm) в массив и проверить совпадения (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!