Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2019, 12:02   #1
Petrov210217
Пользователь
 
Регистрация: 14.11.2018
Сообщений: 89
По умолчанию Нужно что то типа return

Здравствуйте! Написал код макроса для кнопки сохранить, ввел проверку заполнения полей. При проверке выяснилось, что если срабатывает MsgBox , данные все равно записываются в таблицу, а нужно что бы не записывались пока все поля не будут записаны. На другом языке есть return- возвращает функцию назад, если нет выполненных условий, есть что то типа на VBA.
Код:

Private Sub CommandButton1_Click()
         '///////////////---Таблица---///////////////////
Dim lLastRow As Long

    With Sheets("Лист1")
         'поиск первой не заполненной строки
         lLastRow = Sheets(1).Cells(.Rows.Count, 2).End(xlUp).Row + 1
         
         'поиск следующего номера договора
         
         
         'копируем ДОГОВОР из формы(текстбокс3) в ячейку
         Sheets(1).Range("B" & lLastRow).Value = TextBox1.Value
         
         'копируем ДАТА из формы(текстбокс2) в ячейку
         If CheckBox1 = True Then TextBox2.Value = Format(Now, "dd.mm.yyyy") 'копируем текущюю дату в текстбокс2
         Sheets(1).Range("C" & lLastRow).Value = TextBox2.Value ' копируем текущу дату в ячейку из текстбокса2
         If CheckBox1 = False Then Sheets(1).Range("C" & lLastRow).Value = TextBox2.Value 'копируем дату из формы(текстбокс2) в ячейку
         
         'копируем АДРЕСС из формы(текстбокс3) в ячейку
         Sheets(1).Range("D" & lLastRow).Value = TextBox3.Value
         
         'копируем СТАТУС заказа (CheckBox2) в ячейку
         If CheckBox2 = True Then Sheets(1).Range("E" & lLastRow).Value = "Новый" '

         'копируем СТАТУС заказа (CheckBox2) в ячейку
         If CheckBox3 = True Then Sheets(1).Range("E" & lLastRow).Value = "В работе" '

         'копируем СТАТУС заказа (CheckBox2) в ячейку
         If CheckBox4 = True Then Sheets(1).Range("E" & lLastRow).Value = "Закрыт" '
         
         
         'копируем ТИП заказа (CheckBox5) в ячейку
         If CheckBox5 = True Then Sheets(1).Range("F" & lLastRow).Value = "Технический паспорт" '

         'копируем ТИП заказа (CheckBox6) в ячейку
         If CheckBox6 = True Then Sheets(1).Range("F" & lLastRow).Value = "Межевой план" '

         'копируем ТИП заказа (CheckBox7) в ячейку
         If CheckBox7 = True Then Sheets(1).Range("F" & lLastRow).Value = "Технический план" '
         
         'копируем ТИП заказа (CheckBox8) в ячейку
         If CheckBox8 = True Then Sheets(1).Range("F" & lLastRow).Value = "Вынос точек" '

         'копируем ТИП заказа (CheckBox9) в ячейку
         If CheckBox9 = True Then Sheets(1).Range("F" & lLastRow).Value = "Схема для суда" '

         'копируем ТИП заказа (CheckBox10) в ячейку
         If CheckBox10 = True Then Sheets(1).Range("F" & lLastRow).Value = "Схема на КПТ" '
         
         'копируем ТИП заказа (CheckBox11) в ячейку
         If CheckBox11 = True Then Sheets(1).Range("F" & lLastRow).Value = TextBox19.Value 'копируем "другое" из формы(текстбокс19) в ячейку

         'копируем СТОИМОСТЬ из формы(текстбокс4) в ячейку
         Sheets(1).Range("G" & lLastRow).Value = TextBox4.Value

         'копируем ПРЕДОПЛАТА из формы(текстбокс5) в ячейку
         Sheets(1).Range("I" & lLastRow).Value = TextBox5.Value

         'копируем ТЕКУЩИЙ МЕСЯЦ
         Sheets(1).Range("H" & lLastRow).Value = Format(Now, "mm.yyyy")

         'копируем ФИО ЗАКАЗЧИКА из формы(текстбокс6) в ячейку
         Sheets(1).Range("T" & lLastRow).Value = TextBox6.Value

         'копируем ТЕЛЕФОН ЗАКАЗЧИКА из формы(текстбокс7) в ячейку
         Sheets(1).Range("U" & lLastRow).Value = TextBox7.Value

         'копируем ФИО ПРИНЯВШЕГО ЗАКАЗ из формы(текстбокс13) в ячейку
         Sheets(1).Range("V" & lLastRow).Value = TextBox13.Value
         
         'копируем Примечание из формы(текстбокс21) в ячейку
         Sheets(1).Range("W" & lLastRow).Value = TextBox21.Value

         '///////////////---Проверка заполнения полей в форме ввода---///////////////////
         If TextBox1.Value = "" Then MsgBox "Введите номер договора"
         If TextBox2.Value = "" Then MsgBox "Введите дату или установите флажок /Установить текущую дату/"
         If TextBox3.Value = "" Then MsgBox "Введите адресс"
         If TextBox4.Value = "" Then MsgBox "Введите стоимость работы"
         If TextBox5.Value = "" Then MsgBox "Введите сумму предоплаты"
         If TextBox6.Value = "" Then MsgBox "Введите Ф.И.О. заказчика"
         If TextBox7.Value = "" Then MsgBox "Введите контактный номер телефона заказчика"
         If TextBox8.Value = "" Then MsgBox "Введите наименование принятых документов"
         If TextBox8.Value = "" Then MsgBox "Введите Ф.И.О. принявшего заказ"
         If CheckBox2 = False And CheckBox3 = False And CheckBox4 = False Then MsgBox "Установите флажок /Статус заказа/"
         If CheckBox6 = False And CheckBox7 = False And CheckBox8 = False And CheckBox9 = False And CheckBox10 = False And CheckBox11 = False Then MsgBox "Установите флажок /Вид работ/"
    
    End With
End Sub
Нужно, что бы если MsgBox сработал, то данные в таблицу не записывались, до тех пор, пока ошибка не будет исправлена
ЫЫЫЫЫЫ
Petrov210217 вне форума Ответить с цитированием
Старый 09.06.2019, 12:11   #2
Petrov210217
Пользователь
 
Регистрация: 14.11.2018
Сообщений: 89
По умолчанию

И еще вопрос по этому же макросу.
Код:
 
        'поиск следующего номера договора
         
         
         'копируем ДОГОВОР из формы(текстбокс3) в ячейку
         Sheets(1).Range("B" & lLastRow).Value = TextBox1.Value
Хочу сделать флажок, если флажок true, то номер договора вводит пользователь, если флажок False, то номер договора должен браться следующий по возрастанию. Как это сделать в этом макросе? Формат договора 25/04-2019к, следующий должен быть 26/04-2019к
ЫЫЫЫЫЫ
Petrov210217 вне форума Ответить с цитированием
Старый 09.06.2019, 12:35   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Function NextNum(Num$)
  Dim N&
  N = Val(Num):  NextNum = N + 1 & Right(Num, Len(Num) - Len("" & N))
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 09.06.2019, 12:41   #4
Petrov210217
Пользователь
 
Регистрация: 14.11.2018
Сообщений: 89
По умолчанию

Я так понимаю, вы даете код поиска максимального значения в столбце? А как его подключить к моему макросу? И как исправить, если MsgBox сработал, то данные в таблицу не записывались.
ЫЫЫЫЫЫ
Petrov210217 вне форума Ответить с цитированием
Старый 09.06.2019, 19:51   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

нет, Вы поняли не правильно
тут нет никакого поиска это ответ на второй вопрос функция, которая возвращает след. №

пример:
Код:
Sub Test
  msgbox "25/04-2019к   and next = " & MextNum("25/04-2019к")
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 10.06.2019, 05:45   #6
Petrov210217
Пользователь
 
Регистрация: 14.11.2018
Сообщений: 89
По умолчанию

Спасибо за помощь. Первый вопрос решил сам, перенес проверки в начало кода и в конец каждой добавил : Exit Sub. Теперь работает как надо.[CODE] If TextBox1.Value = "" Then MsgBox "Введите номер договора": Exit Sub[CODE]
ЫЫЫЫЫЫ
Petrov210217 вне форума Ответить с цитированием
Старый 10.06.2019, 07:27   #7
Petrov210217
Пользователь
 
Регистрация: 14.11.2018
Сообщений: 89
По умолчанию

А подскажите пожалуйста, есть ли облако, бесплатное или не дорогое для эксель книги с формами и макросами, чтобы все работало?
ЫЫЫЫЫЫ
Petrov210217 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильно я понимаю в PHP return нужно разместить в function.php что бы получилось так : s88s PHP 8 11.04.2016 15:48
Оператор "return" без значения. функции оператора "return" Алексей111083 Помощь студентам 1 17.01.2016 17:18
нужно сравнить два массива указателей типа char Никнейм94 C++ Builder 2 22.05.2013 10:53
Нужно сделать вещь, типа игры Lois Фриланс 4 14.04.2011 03:01