Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, решить 2 задачи: 1. Поместить в массив значения из TextBox (находятся на UserForm) 2. Проверить уникальность каждого значения массива относительно остальных
Первое пытался сделать, но выводятся только имена Текстбоксов, второе для меня пока загадка. Всего второй месяц изучаю VBA в Excel, заклинило что-то
Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, решить 2 задачи: 1. Поместить в массив значения из TextBox (находятся на UserForm) 2. Проверить уникальность каждого значения массива относительно остальных
Первое пытался сделать, но выводятся только имена Текстбоксов, второе для меня пока загадка. Всего второй месяц изучаю VBA в Excel, заклинило что-то EvgenyD
Понятное дело упрощенный . Иначе вопрос не имеет смысла. Я обычно так "изобретаю велосипед" чтобы не в итоговом файле, сделаю, проверю, а потом уже в общий файл прилепляю. Там форма с переменным количеством текстбоксов, тестбоксы создаются при выполнении макроса. Может по этому никто не отвечает, т.к. не поняли что это упрощенный вариант (тогда страшно представить что обо мне подумали).
Понятное дело упрощенный . Иначе вопрос не имеет смысла. Я обычно так "изобретаю велосипед" чтобы не в итоговом файле, сделаю, проверю, а потом уже в общий файл прилепляю. Там форма с переменным количеством текстбоксов, тестбоксы создаются при выполнении макроса. Может по этому никто не отвечает, т.к. не поняли что это упрощенный вариант (тогда страшно представить что обо мне подумали).EvgenyD
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
Судя по коду в примере хотелось проверить заполненность полей? [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
Да, у меня поприметивнее написано, но работает ), вот SetFocus искал, т.к. при незаполненом перескакивал на следующее, а хотелось, чтобы курсор вставал в незаполненый Textbox. Сейчас как раз доделал файл для которого выяснял ответ в данной теме. Будет понятно что я хотел сделать. Код там написан топорно, пока только так могу, буду со временем (и с опытом) "вылизывать". Первой доработкой будет замена моего кода проверки на пустоту на Ваш. Т.к. у меня для каждого TextBox своя процедура, хоть и написана циклом. Но вроде все работает как хотел.
Там не обработано событие отмены и проверка значений Inputbox (можно например букву ввести), т.к. это будет доделано в составе другого файла. (эта форма тоже часть моего учебного файла).
Да, у меня поприметивнее написано, но работает ), вот SetFocus искал, т.к. при незаполненом перескакивал на следующее, а хотелось, чтобы курсор вставал в незаполненый Textbox. Сейчас как раз доделал файл для которого выяснял ответ в данной теме. Будет понятно что я хотел сделать. Код там написан топорно, пока только так могу, буду со временем (и с опытом) "вылизывать". Первой доработкой будет замена моего кода проверки на пустоту на Ваш. Т.к. у меня для каждого TextBox своя процедура, хоть и написана циклом. Но вроде все работает как хотел.
Там не обработано событие отмены и проверка значений Inputbox (можно например букву ввести), т.к. это будет доделано в составе другого файла. (эта форма тоже часть моего учебного файла).EvgenyD
Судя по коду в примере хотелось проверить заполненность полей?
Здравствуйте, Уважаемые! Применил этот код из Сообщения № 6 - все отлично! Но вот такой вопрос у меня. Как можно игнорировать проверку заполненности некоторых полей, т.к. они необязательны к заполнению?
Цитата
Судя по коду в примере хотелось проверить заполненность полей?
Здравствуйте, Уважаемые! Применил этот код из Сообщения № 6 - все отлично! Но вот такой вопрос у меня. Как можно игнорировать проверку заполненности некоторых полей, т.к. они необязательны к заполнению?VictorM
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]
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
игнорировать проверку заполненности некоторых полей, т.к. они необязательны к заполнению?
Привет, Виктор: Более простой вариант (обязательны к заполнению только TextBox1 и TextBox2): [vba]
Код
Private Sub CommandButton1_Click() If Me.TextBox1 = "" Or Me.TextBox2 = "" Then MsgBox "Не тупи, заполни обязательные поля!" TextBox1.SetFocus End If End Sub
игнорировать проверку заполненности некоторых полей, т.к. они необязательны к заполнению?
Привет, Виктор: Более простой вариант (обязательны к заполнению только TextBox1 и TextBox2): [vba]
Код
Private Sub CommandButton1_Click() If Me.TextBox1 = "" Or Me.TextBox2 = "" Then MsgBox "Не тупи, заполни обязательные поля!" TextBox1.SetFocus End If End Sub
Serge_007, вариант хоть и имеет право на существование но не удовлетворяет условиям задачи никак... Первое, там динамически формируемые текстбоксы, так что и код твоей процедуры придется тоже динамически реформировать, но это ладно... Или - а зачем при незаполненном TextBox2 (и заполненном TextBox1) ставить фокус на TextBox1?
Ты от ответа не уходи - нету в том посте никаких TextBox1.SetFocus :)
Serge_007, вариант хоть и имеет право на существование но не удовлетворяет условиям задачи никак... Первое, там динамически формируемые текстбоксы, так что и код твоей процедуры придется тоже динамически реформировать, но это ладно... Или - а зачем при незаполненном TextBox2 (и заполненном TextBox1) ставить фокус на TextBox1?
nilem, да, код интересный, буду пробовать, спасибо. Serge_007, такой вариант у меня был задуман с самого начала, НО проверять нужно, допустим, 15-18 текстбоксов и только 2-3 из них необязательные. Получается, что нужно прописывать проверку всех обязательных? муторно это.
nilem, да, код интересный, буду пробовать, спасибо. Serge_007, такой вариант у меня был задуман с самого начала, НО проверять нужно, допустим, 15-18 текстбоксов и только 2-3 из них необязательные. Получается, что нужно прописывать проверку всех обязательных? муторно это.VictorM
Сообщение отредактировал VictorM - Среда, 12.08.2015, 20:56