Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/76: Рейтинг темы: голосов - 76, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 44
1

Проверка TextBox на заполненность

01.04.2015, 08:09. Показов 13924. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. У меня на форме есть 20 текст боксов. При нажатии на кнопку информация из текст боксов заносится в таблицу. Нужно чтобы если есть пустой текст бокс то данные в таблицу не переносились, а выходило предупреждение что такое то поле пустое.
Заранее благодарю
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2015, 08:09
Ответы с готовыми решениями:

Проверка TextBox на заполненность (в MultiPage)
Добрый вечер! Необходимо проверить все Контролы, типа "Textbox" находящиеся на странице 1 в...

Сделать textbox невидимым для проверки на заполненность ячеек
подскажите пожалуйста у меня куча textbox на форме надо чтобы на форме с одной textbox...

Проверка на заполненность поля и его заполнение Access
Здравствуйте, столкнулся с проблемой в задании. Есть таблица и форма из которой она заполняется,...

Проверка по заданным по условию колонок таблицы на заполненность ячеек
Добрый день! есть макрос. что он делает: на 1ом листе табличка, во второй колонке - значения:...

19
466 / 123 / 61
Регистрация: 04.03.2015
Сообщений: 325
01.04.2015, 09:22 2
Лучший ответ Сообщение было отмечено zLegendary как решение

Решение

Это функция проверки текстбоксов на форме

Visual Basic
1
2
3
4
5
6
7
8
9
Public Function test(UForm As Object) As Boolean
    Dim cnt As Control
    test = True
    For Each cnt In UForm.Controls
        If TypeName(cnt) = "TextBox" Then
            If cnt.Value = "" Then test = False
        End If
    Next cnt
End Function
Впишите там, где вам нужно сделать проверку
Visual Basic
1
2
3
4
If Not test(Me) then 
    MsgBox("Заполните все поля")
    Exit Sub
End If
2
3911 / 2311 / 782
Регистрация: 02.11.2012
Сообщений: 6,147
01.04.2015, 09:25 3
моих знаний хватает только на такой вариант.
Visual Basic
1
2
3
4
5
6
7
8
9
Dim i%, Tx$
With UserForm1.Controls
For i = 1 To .Count
If .Item(i - 1).Name Like "TextBox*" Then
   If .Item(i - 1).Text = "" Then Tx = Tx & " " & "TextBox" & i
End If
Next
End With
MsgBox "Заполните поля " & Trim(Tx)
0
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 44
01.04.2015, 09:39  [ТС] 4
Если есть пустой текстбокс то ошибку выводит не фразу, а знаки вопроса. и информация из заполненных текст боксов все равно заполняется(

Добавлено через 1 минуту
Со знаками вопроса я разобрался, сейчас все нормально отображается. Но вот информация все равно переносится
0
466 / 123 / 61
Регистрация: 04.03.2015
Сообщений: 325
01.04.2015, 09:41 5
Поменяйте русский текст на "Fill all fields". Может она раньше проверки в коде заполняется. Код выложите.
0
3911 / 2311 / 782
Регистрация: 02.11.2012
Сообщений: 6,147
01.04.2015, 09:43 6
Цитата Сообщение от zLegendary Посмотреть сообщение
Но вот информация все равно переносится
Делайте проверку в начале кода и если есть не заполненные делайте выход из кода и активацию формы. Vovchikvsb, вам дал вариант (второй код)
1
466 / 123 / 61
Регистрация: 04.03.2015
Сообщений: 325
01.04.2015, 09:43 7
Цитата Сообщение от zLegendary Посмотреть сообщение
При нажатии на кнопку информация из текст боксов заносится в таблицу
Код события этой кнопки выложите.
0
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 44
01.04.2015, 10:11  [ТС] 8
Поставил проверку вперед и все заработало.

Добавлено через 38 секунд
А можно немного откоментировать функцию?) хочу разобраться в ней. Спасибо)

Добавлено через 1 минуту
над кодом вы ужаснетесь)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Private Sub CommandButton1_Click()
If Not test(Me) Then
    MsgBox ("Заполните все поля")
    Exit Sub
End If
'-----------------Правильная подготовка к аудиту
c7 = 7 'номер колонки для TextBox7
rk7 = Sheets("calibr").Columns(c7).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk7, c7) = Me.TextBox7.Value
'-----------------Поведение Аудиторов GMP/BBQ в ходе аудита
c8 = 8 'номер колонки для TextBox8
rk8 = Sheets("calibr").Columns(c8).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk8, c8) = Me.TextBox8.Value
'-----------------Продолжительность проведения аудита
c9 = 9 'номер колонки для TextBox9
rk9 = Sheets("calibr").Columns(c9).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk9, c9) = Me.TextBox9.Value
'-----------------Аудит проведен правильно
c10 = 10 'номер колонки для TextBox10
rk10 = Sheets("calibr").Columns(c10).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk10, c10) = Me.TextBox10.Value
'----------------- выборочная проверка в ходе аудита на  выполнение предыдущих замечаний
c11 = 11 'номер колонки для TextBox11
rk11 = Sheets("calibr").Columns(c11).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk11, c11) = Me.TextBox11.Value
'-----------------Способность  Аудиторами GMP/BBQ "видеть" позитивные и негативные моменты
c12 = 12 'номер колонки для TextBox12
rk12 = Sheets("calibr").Columns(c12).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk12, c12) = Me.TextBox12.Value
'----------------- Правильность, своевременность заполнения   GMP-action plan
c13 = 13 'номер колонки для TextBox13
rk13 = Sheets("calibr").Columns(c13).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk13, c13) = Me.TextBox13.Value
'----------------- Аудиторы GMP/BBQ представились и назвали цель визита
c14 = 14 'номер колонки для TextBox14
rk14 = Sheets("calibr").Columns(c14).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk14, c14) = Me.TextBox14.Value
'----------------- были озвучены и положительные моменты
c15 = 15 'номер колонки для TextBox15
rk15 = Sheets("calibr").Columns(c15).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk15, c15) = Me.TextBox15.Value
'----------------- обсуждались риски по пищевой безопасности
c16 = 16 'номер колонки для TextBox16
rk16 = Sheets("calibr").Columns(c16).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk16, c16) = Me.TextBox16.Value
'----------------- вопросы, связанные с инструкциями и процедурами
c17 = 17 'номер колонки для TextBox17
rk17 = Sheets("calibr").Columns(c17).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk17, c17) = Me.TextBox17.Value
'-----------------попаданием посторонних предметов
c18 = 18 'номер колонки для TextBox18
rk18 = Sheets("calibr").Columns(c18).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk18, c18) = Me.TextBox18.Value
'-----------------возможные последствия для здоровья наших потребителей
c19 = 19 'номер колонки для TextBox19
rk19 = Sheets("calibr").Columns(c19).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk19, c19) = Me.TextBox19.Value
'-----------------определены  мероприятия по устранению опасных для продукта  условий/действий
c20 = 20 'номер колонки для TextBox20
rk20 = Sheets("calibr").Columns(c20).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk20, c20) = Me.TextBox20.Value
'-----------------По окончании беседы Аудиторы GMP/BBQ поблагодарили работника
c21 = 21 'номер колонки для TextBox21
rk21 = Sheets("calibr").Columns(c21).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk21, c21) = Me.TextBox21.Value
'-----------------NGMP - visual standarts
c22 = 22 'номер колонки для TextBox22
rk22 = Sheets("calibr").Columns(c22).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk22, c22) = Me.TextBox22.Value
'-----------------Результат
c23 = 23 'номер колонки для TextBox23
rk23 = Sheets("calibr").Columns(c23).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk23, c23) = Me.TextBox23.Value
'-----------------Результаты калибрации сообщены аудиторам
c24 = 24 'номер колонки для TextBox24
rk24 = Sheets("calibr").Columns(c24).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk24, c24) = Me.TextBox24.Value
'-----------------Дата
c1 = 1 'номер колонки для TextBox1
rk1 = Sheets("calibr").Columns(c1).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk1, c1) = Me.TextBox1.Value
'-----------------Номер участка
c3 = 3 'номер колонки для TextBox2
rk3 = Sheets("calibr").Columns(c3).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk3, c3) = Me.TextBox2.Value
'-----------------Описание участка
c4 = 4 'номер колонки для TextBox3
rk4 = Sheets("calibr").Columns(c4).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk4, c4) = Me.TextBox3.Value
'-----------------Аудитор 1
c5 = 5 'номер колонки для TextBox5
rk5 = Sheets("calibr").Columns(c5).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk5, c5) = Me.TextBox5.Value
'-----------------Аудитор 2
c6 = 6 'номер колонки для TextBox6
rk6 = Sheets("calibr").Columns(c6).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk6, c6) = Me.TextBox6.Value
'-----------------Калибратор
c2 = 2 'номер колонки для TextBox1
rk2 = Sheets("calibr").Columns(c2).Rows(65536).End(xlUp).Row + 1
Sheets("calibr").Cells(rk2, c2) = Me.ComboBox1.Value
 
End Sub
0
466 / 123 / 61
Регистрация: 04.03.2015
Сообщений: 325
01.04.2015, 10:20 9
Цитата Сообщение от zLegendary Посмотреть сообщение
А можно немного откоментировать функцию?)
Visual Basic
1
2
3
4
5
6
7
8
9
Public Function test(UForm As Object) As Boolean
    Dim cnt As Control 'объявление переменной типа Control
    test = True 'Функция принимает True
    For Each cnt In UForm.Controls ' цикл по всем контролам формы переданной в функцию
        If TypeName(cnt) = "TextBox" Then 'проверка является ли текущий контрол текстбоксом
            If cnt.Value = "" Then test = False 'если текстбокс пустой, то функция принимает False
        End If 'закрытие первого If
    Next cnt 'закрытие цикла
End Function
0
Заблокирован
01.04.2015, 10:23 10
Цитата Сообщение от zLegendary Посмотреть сообщение
над кодом вы ужаснетесь)
есть немножко
Циклы поюзайте...
0
3911 / 2311 / 782
Регистрация: 02.11.2012
Сообщений: 6,147
01.04.2015, 10:23 11
zLegendary, у вас в разных столбцах разное заполнение строк?
0
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 44
01.04.2015, 10:36  [ТС] 12
немного не понял вас. Все текст боксы на форме заполняют 1 строку. Каждый текст бокс - свой столбик.

Добавлено через 2 минуты
Просто только начал изучать VBA
0
3911 / 2311 / 782
Регистрация: 02.11.2012
Сообщений: 6,147
01.04.2015, 10:53 13
Цитата Сообщение от zLegendary Посмотреть сообщение
Все текст боксы на форме заполняют 1 строку. Каждый текст бокс - свой столбик.
зачем тогда вы каждый раз определяете последнюю заполненную ячейку (rk1-rk24). Один раз определили rk1 и дальше её одну и подставляйте. итог лишних 23 строчки кода.
0
466 / 123 / 61
Регистрация: 04.03.2015
Сообщений: 325
01.04.2015, 11:14 14
Лучший ответ Сообщение было отмечено zLegendary как решение

Решение

Цитата Сообщение от zLegendary Посмотреть сообщение
над кодом вы ужаснетесь)
Переделал в цикл.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub CommandButton1_Click()
    Dim i As Integer, c As Integer, r As Long
    If Not test(Me) Then
        MsgBox ("Заполните все поля")
        Exit Sub
    End If
    With Sheets("calibr")
        r = .Columns(1).Rows(65536).End(xlUp).Row + 1
        For i = 1 To 24
            If i <> 4 Then
                c = i
                If i = 2 Or i = 3 Then c = i + 1
                .Cells(r, c) = Me.Controls("TextBox" & i).Value
            End If
        Next i
        .Cells(r, 2) = Me.ComboBox1.Value
    End With
End Sub
Добавлено через 13 минут
Если хотите иметь возможность в коде поменять столбцы для текстбоксов, то можно так

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub CommandButton1_Click()
    Dim i As Integer, R As Long
    Dim C(1 To 24) As Integer
    If Not test(Me) Then
        MsgBox ("Заполните все поля")
        Exit Sub
    End If
    C(4) = 2 'Для ComboBox1
    C(1) = 1 'Для TextBox1
    C(2) = 3 'Для TextBox2 и т.д.
    C(3) = 4
    C(5) = 5
    C(7) = 7
    C(8) = 8
    C(9) = 9
    C(10) = 10
    C(11) = 11
    C(12) = 12
    C(13) = 13
    C(14) = 14
    C(15) = 15
    C(16) = 16
    C(17) = 17
    C(18) = 18
    C(19) = 19
    C(20) = 20
    C(21) = 21
    C(22) = 22
    C(23) = 23
    C(24) = 24
    R = Sheets("calibr").Columns(1).Rows(65536).End(xlUp).Row + 1
    For i = 1 To 24
        If i <> 4 Then Sheets("calibr").Cells(R, C(i)) = Me.Controls("TextBox" & i).Value
    Next i
    Sheets("calibr").Cells(R, C(4)) = Me.ComboBox1.Value
End Sub
1
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 44
01.04.2015, 11:18  [ТС] 15
Воу, Огромное спасибо) А циклы значительно упрощают жизнь
0
466 / 123 / 61
Регистрация: 04.03.2015
Сообщений: 325
01.04.2015, 11:23 16
Цитата Сообщение от zLegendary Посмотреть сообщение
А циклы значительно упрощают жизнь
Согласен
1
0 / 0 / 0
Регистрация: 27.07.2020
Сообщений: 8
06.08.2020, 19:46 17
А можно сделать так,что в случае, если текстбокс заполнен, то формируется новая строка в экселе, а если текстбокс не заполнен, то и строка в экселе не добавляется?

Помогите с кодом, пожалуйста
0
466 / 123 / 61
Регистрация: 04.03.2015
Сообщений: 325
06.08.2020, 22:31 18
Цитата Сообщение от АСК_ Посмотреть сообщение
А можно сделать так,что в случае, если текстбокс заполнен, то формируется новая строка в экселе, а если текстбокс не заполнен, то и строка в экселе не добавляется?
Помогите с кодом, пожалуйста
Если я правильно понял, то нужно то же самое, но только без сообщения.

Можно просто убрать строку:
Visual Basic
1
MsgBox ("Заполните все поля")
0
0 / 0 / 0
Регистрация: 27.07.2020
Сообщений: 8
09.08.2020, 10:37 19
Посмотрите, пожалуйста файл во вложении.

В файле 3 вкладки: "Добавить пациента" - работает корректно
"Аналитика" - еще не делал ничего
и "Ввод данных" - здесь 2 момента не получается: 1. при выборе значений из комбобокса в текстбоксах не всегда выскакивают корректные значения; 2. При внесении значений в текстбоксы "значения" нужно чтобы только заполненные текстбоксы формировали строки в файле на закладке BD, а не 19 строк каждый раз образовывалось
Вложения
Тип файла: zip VBA 06.08.20_2.zip (22 байт, 8 просмотров)
0
Ученик Нарушитель
233 / 143 / 53
Регистрация: 01.04.2020
Сообщений: 469
09.08.2020, 18:44 20
АСК_, архив пустой. Здравствуйте.
А лучше создайте свою тему. Модераторы придут...
0
09.08.2020, 18:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2020, 18:44
Помогаю со студенческими работами здесь

Проверка TextBox на заполненность в частном случае
Всем привет. Есть четыре TextBox'a обрабатываются они вот так: Calculation calc = new...

Проверка на заполненность
Всем доброго времени суток, столкнулся с такой проблемой, как на форме проверить заполнены ли...

Проверка на заполненность
Есть такая форма значит я делаю проверку на заполнение if ( length(Edit1.Text) = 0 ) or (...

Проверка инпутов на заполненность
Здравствуйте! Ситуация такая: есть &lt;form&gt;, внутри нее несколько &lt;div&gt;, в каждом &lt;div&gt; своя группа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru