Добрый вечер. Есть форма с комбобоксом для выбора марки а/м. Если нужно добавить новые данные, то вносим текст в поле комбобокса и жмет кнопку +. Даные добавляются в свободную строку, но при этом не отображается информация в MsgBox. Как можно устранить , эту недоработку, что бы при добавлении нового значения отображалось СООБЩЕНИЕ:MsgBox " Новая марка а/м успешно добавлена в базу данных! ", vbLf & "Строка в базе: " & LastRow
Добрый вечер. Есть форма с комбобоксом для выбора марки а/м. Если нужно добавить новые данные, то вносим текст в поле комбобокса и жмет кнопку +. Даные добавляются в свободную строку, но при этом не отображается информация в MsgBox. Как можно устранить , эту недоработку, что бы при добавлении нового значения отображалось СООБЩЕНИЕ:MsgBox " Новая марка а/м успешно добавлена в базу данных! ", vbLf & "Строка в базе: " & LastRowparovoznik
Find нужно присвоить значение, типа r=Range(A:A).(Find:=cmb).row или текст или еще что-то... Не знаю, на что в примере ориентируется Is Nothing... Впрочем, это просто мои предположения...
Find нужно присвоить значение, типа r=Range(A:A).(Find:=cmb).row или текст или еще что-то... Не знаю, на что в примере ориентируется Is Nothing... Впрочем, это просто мои предположения... _Igor_61
Сообщение отредактировал _Igor_61 - Суббота, 24.04.2021, 20:57
parovoznik, не включайте собственную обработку ошибок, если не собираетесь их ловить.
[vba]
Код
'Кнопка Добавить данные в комбобокс Private Sub Btn_Add_Cmb_Click()
'On Error Resume Next 'отключаем останов при ошибке 'проверка на заполнение полей If Me.Cmb_МаркаАвто = "" Then: MsgBox "Отсутствуют данные", 16, "Сообщение": Exit Sub With Me МаркаАвто = Cmb_МаркаАвто End With With Worksheets("База") If .Columns(4).Find(МаркаАвто, , xlValues, xlWhole) Is Nothing Then LastRow = .Cells(Rows.Count, 4).End(xlUp).Row + 1 .Cells(LastRow, 4) = Cmb_МаркаАвто ' .Range(Cells(2, 4), Cells(LastRow + 1, 4)).Borders.LineStyle = xlContinuous ' обрамление ячеек ' MsgBox " Новая марка а/м успешно добавлена в базу данных! ", vbLf & "Строка в базе: " & LastRow .Range(.Cells(2, 4), .Cells(LastRow + 1, 4)).Borders.LineStyle = xlContinuous ' обрамление ячеек MsgBox " Новая марка а/м успешно добавлена в базу данных! " & vbLf & "Строка в базе: " & LastRow
Else MsgBox "Данный а/м есть в базе данных!", vbCritical, "Сообщение": Exit Sub ' Запрет на ввод в базу данных а/м,которые уже присутствуют End If End With ' обновление комбобокса LastRow = Sheets("База").Cells(Rows.Count, 4).End(xlUp).Row 'Нашли последнюю заполненную строку по столбцу D n = 0 With Me.Cmb_МаркаАвто 'Применительно к указанному КомбоБоксу For i = 2 To LastRow 'Цикл со второй по последнюю строку .AddItem "" 'Добавили пустую строку в КомбоБокс .List(n, 0) = Sheets("База").Cells(i, 4).Value 'Заполнили её значением из текущей (в цикле) ячейки столбца D n = n + 1 'Увеличили номер строки в КомбоБоксе Next End With End Sub
[/vba] MsgBox таперь "отображается". Но дальше идет добавление кучи пустых ячеек в комбобокс в цикле вместо одной марки. Но это уже второй вопрос
parovoznik, не включайте собственную обработку ошибок, если не собираетесь их ловить.
[vba]
Код
'Кнопка Добавить данные в комбобокс Private Sub Btn_Add_Cmb_Click()
'On Error Resume Next 'отключаем останов при ошибке 'проверка на заполнение полей If Me.Cmb_МаркаАвто = "" Then: MsgBox "Отсутствуют данные", 16, "Сообщение": Exit Sub With Me МаркаАвто = Cmb_МаркаАвто End With With Worksheets("База") If .Columns(4).Find(МаркаАвто, , xlValues, xlWhole) Is Nothing Then LastRow = .Cells(Rows.Count, 4).End(xlUp).Row + 1 .Cells(LastRow, 4) = Cmb_МаркаАвто ' .Range(Cells(2, 4), Cells(LastRow + 1, 4)).Borders.LineStyle = xlContinuous ' обрамление ячеек ' MsgBox " Новая марка а/м успешно добавлена в базу данных! ", vbLf & "Строка в базе: " & LastRow .Range(.Cells(2, 4), .Cells(LastRow + 1, 4)).Borders.LineStyle = xlContinuous ' обрамление ячеек MsgBox " Новая марка а/м успешно добавлена в базу данных! " & vbLf & "Строка в базе: " & LastRow
Else MsgBox "Данный а/м есть в базе данных!", vbCritical, "Сообщение": Exit Sub ' Запрет на ввод в базу данных а/м,которые уже присутствуют End If End With ' обновление комбобокса LastRow = Sheets("База").Cells(Rows.Count, 4).End(xlUp).Row 'Нашли последнюю заполненную строку по столбцу D n = 0 With Me.Cmb_МаркаАвто 'Применительно к указанному КомбоБоксу For i = 2 To LastRow 'Цикл со второй по последнюю строку .AddItem "" 'Добавили пустую строку в КомбоБокс .List(n, 0) = Sheets("База").Cells(i, 4).Value 'Заполнили её значением из текущей (в цикле) ячейки столбца D n = n + 1 'Увеличили номер строки в КомбоБоксе Next End With End Sub
[/vba] MsgBox таперь "отображается". Но дальше идет добавление кучи пустых ячеек в комбобокс в цикле вместо одной марки. Но это уже второй вопрос Апострофф
[/vba] Вроде бы работает. Я всегда использую доп. форму и через нее добавляю, но у меня 4 комба и как под каждый комб. прописать доп. форму не знаю. поэтому пошел по поэтому варианту. Еще раз спасибо за помощь.
[/vba] Вроде бы работает. Я всегда использую доп. форму и через нее добавляю, но у меня 4 комба и как под каждый комб. прописать доп. форму не знаю. поэтому пошел по поэтому варианту. Еще раз спасибо за помощь.parovoznik
parovoznik, вот немножко сокращенный код Вашей кнопки- [vba]
Код
'Кнопка Добавить данные в комбобокс Private Sub Btn_Add_Cmb_Click() If Cmb_МаркаАвто = "" Then: MsgBox "Отсутствуют данные", 16, "Сообщение": Exit Sub If Cmb_МаркаАвто.ListIndex >= 0 Then MsgBox "Данный а/м есть в базе данных!", vbCritical, "Сообщение": Exit Sub ' Запрет на ввод в базу данных а/м,которые уже присутствуют Cmb_МаркаАвто.AddItem Cmb_МаркаАвто With Range("База!D2").Resize(Cmb_МаркаАвто.ListCount) .Value = Cmb_МаркаАвто.List .Borders.LineStyle = xlContinuous End With End Sub
[/vba]
parovoznik, вот немножко сокращенный код Вашей кнопки- [vba]
Код
'Кнопка Добавить данные в комбобокс Private Sub Btn_Add_Cmb_Click() If Cmb_МаркаАвто = "" Then: MsgBox "Отсутствуют данные", 16, "Сообщение": Exit Sub If Cmb_МаркаАвто.ListIndex >= 0 Then MsgBox "Данный а/м есть в базе данных!", vbCritical, "Сообщение": Exit Sub ' Запрет на ввод в базу данных а/м,которые уже присутствуют Cmb_МаркаАвто.AddItem Cmb_МаркаАвто With Range("База!D2").Resize(Cmb_МаркаАвто.ListCount) .Value = Cmb_МаркаАвто.List .Borders.LineStyle = xlContinuous End With End Sub
parovoznik, в ладоши будете хлопать после увольнения за ошибки ввода. Если не хотите, чтобы это произошло, добавьте проверку комбобокса на пробелы, заглавные-прописные, кириллица-латиница. Очень многие девочки в офисах на это не обращают внимания, и потом идут на форумы с вопросами типа "почему формула (макрос) работает не так, как я хочу". При добавлении новой модели обратите внимание, чтобы добавлялось "BMV" а не " BMV " - для Excel это разные значения, и ему пофиг что для Вас это одна и та же марка машины. Это не в плане претензий к Вам, а в плане того, что Вы пытаетесь использовать способы, не понимая как они работают (вывод сделан из файла в стартовом сообщении). Просто обратите на это внимание, в будущем пригодится
parovoznik, в ладоши будете хлопать после увольнения за ошибки ввода. Если не хотите, чтобы это произошло, добавьте проверку комбобокса на пробелы, заглавные-прописные, кириллица-латиница. Очень многие девочки в офисах на это не обращают внимания, и потом идут на форумы с вопросами типа "почему формула (макрос) работает не так, как я хочу". При добавлении новой модели обратите внимание, чтобы добавлялось "BMV" а не " BMV " - для Excel это разные значения, и ему пофиг что для Вас это одна и та же марка машины. Это не в плане претензий к Вам, а в плане того, что Вы пытаетесь использовать способы, не понимая как они работают (вывод сделан из файла в стартовом сообщении). Просто обратите на это внимание, в будущем пригодится _Igor_61
parovoznik, я не про кавычки (кавычки=цитата) а про пробелы и прочее. Совсем недавно разбирался прочему в файле со складским учетом неправильно считаются результаты. Названия брались из выгрузки из 1С. Так вот там кроме лишних пробелов и написания (простых и заглавных букв), благодаря чему появились позиции - дубли, в некоторых наименованиях первые буквы "С" оказались английскими. Какая-то девочка постаралась Поэтому и решил Вас предупредить о возможных последствиях. Успехов!
parovoznik, я не про кавычки (кавычки=цитата) а про пробелы и прочее. Совсем недавно разбирался прочему в файле со складским учетом неправильно считаются результаты. Названия брались из выгрузки из 1С. Так вот там кроме лишних пробелов и написания (простых и заглавных букв), благодаря чему появились позиции - дубли, в некоторых наименованиях первые буквы "С" оказались английскими. Какая-то девочка постаралась Поэтому и решил Вас предупредить о возможных последствиях. Успехов!_Igor_61