Добрый день, уважаемые форумчане. Тут я нашел нужный мне код vba. Спасибо создателю. [vba]
Код
Option Explicit
Private Sub ComboBox1_Change() ComboBox1.RowSource = "Мастера!a1:a20" End Sub
Private Sub CommandButton1_Click() Dim iLastRow As Long Dim iFoundRng As Range Dim iBazaSht As Worksheet Dim iResponse As Byte If Me.TextBox1 = "" Then MsgBox "Введите информацию в поле 1", vbExclamation, "Ошибка" Exit Sub End If Set iBazaSht = ThisWorkbook.Sheets("База") 'имя листа, куда будем вносить информацию Set iFoundRng = iBazaSht.Columns(2).Find(what:=Me.TextBox1.Text, LookAt:=xlWhole) 'ячейка целиком 'если такая запись уже есть If Not iFoundRng Is Nothing Then iResponse = MsgBox("Такая запись уже существует. Заменить её?" & vbCr & "Да - заменить старую, Нет - добавить в базу", vbYesNoCancel + vbExclamation, "Внимание!") If iResponse = vbYes Then With Sheets(iBazaSht.Name) .Cells(iFoundRng.Row, 2) = Me.TextBox1 .Cells(iFoundRng.Row, 3) = Me.TextBox2 .Cells(iFoundRng.Row, 4) = Me.TextBox3 .Cells(iFoundRng.Row, 5) = Me.TextBox4 .Cells(iFoundRng.Row, 6) = Me.TextBox5 .Cells(iFoundRng.Row, 7) = Me.TextBox6 .Cells(iFoundRng.Row, 8) = Me.TextBox7 .Cells(iFoundRng.Row, 9) = Me.ComboBox1 Me.TextBox1 = "" Me.TextBox2 = "" Me.TextBox3 = "" Me.TextBox4 = "" Me.TextBox5 = "" Me.TextBox6 = "" Me.TextBox7 = ""
End With MsgBox "Информация в базе обновлена!", vbInformation, "База" Exit Sub End If If iResponse = vbCancel Then Exit Sub End If With Sheets(iBazaSht.Name) iLastRow = .Cells(.Rows.Count, 4).End(xlUp).Row + 1 .Cells(iLastRow, 2) = Me.TextBox1 .Cells(iLastRow, 3) = Me.TextBox2 .Cells(iLastRow, 4) = Me.TextBox3 .Cells(iLastRow, 5) = Me.TextBox4 .Cells(iLastRow, 6) = Me.TextBox5 .Cells(iLastRow, 7) = Me.TextBox6 .Cells(iLastRow, 8) = Me.TextBox7 .Cells(iLastRow, 9) = Me.ComboBox1 End With Me.TextBox1 = "" Me.TextBox2 = "" Me.TextBox3 = "" Me.TextBox4 = "" Me.TextBox5 = "" Me.TextBox6 = "" Me.TextBox7 = "" MsgBox "Информация добавлена в базу!", vbInformation, "База" End Sub
Private Sub CommandButton2_Click() End End Sub
Private Sub TextBox1_Change()
End Sub
Private Sub TextBox2_Change()
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub UserForm_Initialize() ComboBox1.RowSource = "Мастера!a1:a20" End Sub
[/vba] Вопрос, что нужно дописать,чтоб вводимые значения сохранялись как число,а не как текст? И почему при нажатии enter в форме курсор переходит до 4 ячейки по порядку,а потом на кнопку добавить, а не перемещается дальше? Благодарю за комментарии.
Добрый день, уважаемые форумчане. Тут я нашел нужный мне код vba. Спасибо создателю. [vba]
Код
Option Explicit
Private Sub ComboBox1_Change() ComboBox1.RowSource = "Мастера!a1:a20" End Sub
Private Sub CommandButton1_Click() Dim iLastRow As Long Dim iFoundRng As Range Dim iBazaSht As Worksheet Dim iResponse As Byte If Me.TextBox1 = "" Then MsgBox "Введите информацию в поле 1", vbExclamation, "Ошибка" Exit Sub End If Set iBazaSht = ThisWorkbook.Sheets("База") 'имя листа, куда будем вносить информацию Set iFoundRng = iBazaSht.Columns(2).Find(what:=Me.TextBox1.Text, LookAt:=xlWhole) 'ячейка целиком 'если такая запись уже есть If Not iFoundRng Is Nothing Then iResponse = MsgBox("Такая запись уже существует. Заменить её?" & vbCr & "Да - заменить старую, Нет - добавить в базу", vbYesNoCancel + vbExclamation, "Внимание!") If iResponse = vbYes Then With Sheets(iBazaSht.Name) .Cells(iFoundRng.Row, 2) = Me.TextBox1 .Cells(iFoundRng.Row, 3) = Me.TextBox2 .Cells(iFoundRng.Row, 4) = Me.TextBox3 .Cells(iFoundRng.Row, 5) = Me.TextBox4 .Cells(iFoundRng.Row, 6) = Me.TextBox5 .Cells(iFoundRng.Row, 7) = Me.TextBox6 .Cells(iFoundRng.Row, 8) = Me.TextBox7 .Cells(iFoundRng.Row, 9) = Me.ComboBox1 Me.TextBox1 = "" Me.TextBox2 = "" Me.TextBox3 = "" Me.TextBox4 = "" Me.TextBox5 = "" Me.TextBox6 = "" Me.TextBox7 = ""
End With MsgBox "Информация в базе обновлена!", vbInformation, "База" Exit Sub End If If iResponse = vbCancel Then Exit Sub End If With Sheets(iBazaSht.Name) iLastRow = .Cells(.Rows.Count, 4).End(xlUp).Row + 1 .Cells(iLastRow, 2) = Me.TextBox1 .Cells(iLastRow, 3) = Me.TextBox2 .Cells(iLastRow, 4) = Me.TextBox3 .Cells(iLastRow, 5) = Me.TextBox4 .Cells(iLastRow, 6) = Me.TextBox5 .Cells(iLastRow, 7) = Me.TextBox6 .Cells(iLastRow, 8) = Me.TextBox7 .Cells(iLastRow, 9) = Me.ComboBox1 End With Me.TextBox1 = "" Me.TextBox2 = "" Me.TextBox3 = "" Me.TextBox4 = "" Me.TextBox5 = "" Me.TextBox6 = "" Me.TextBox7 = "" MsgBox "Информация добавлена в базу!", vbInformation, "База" End Sub
Private Sub CommandButton2_Click() End End Sub
Private Sub TextBox1_Change()
End Sub
Private Sub TextBox2_Change()
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub UserForm_Initialize() ComboBox1.RowSource = "Мастера!a1:a20" End Sub
[/vba] Вопрос, что нужно дописать,чтоб вводимые значения сохранялись как число,а не как текст? И почему при нажатии enter в форме курсор переходит до 4 ячейки по порядку,а потом на кнопку добавить, а не перемещается дальше? Благодарю за комментарии.miha_
Правый клик на форме (не на элементе формы), в меню выбрать Tab Order С помощью кнопок Move Up/Move Down перемещать элементы списка. По окончанию обязательно подтвердить изменения (кнопка ОК). Можно в свойствах каждого элемента задать Tab Index, но это не так удобно.
Элементы формы в полях ввода имеют текстовый формат.Для вывода на лист числовых значений текст преобразовать в число: [vba]
[/vba] А чтобы избежать появления ошибки, перед преобразованием в Double нужно проверить, можно ли текст преобразовать в число. [vba]
Код
If IsNumeric(TextBox1.Text) Then .Cells(iLastRow, 2) = CDbl(Me.TextBox1) Else MsgBox "БЯДА!!!", 64, "" End If
[/vba] С Val проще - преобразовывается левая числовая часть. Если справа есть текст - игнорируется. Если слева не число, в ячейку запишется ноль.
Правый клик на форме (не на элементе формы), в меню выбрать Tab Order С помощью кнопок Move Up/Move Down перемещать элементы списка. По окончанию обязательно подтвердить изменения (кнопка ОК). Можно в свойствах каждого элемента задать Tab Index, но это не так удобно.
Элементы формы в полях ввода имеют текстовый формат.Для вывода на лист числовых значений текст преобразовать в число: [vba]
[/vba] А чтобы избежать появления ошибки, перед преобразованием в Double нужно проверить, можно ли текст преобразовать в число. [vba]
Код
If IsNumeric(TextBox1.Text) Then .Cells(iLastRow, 2) = CDbl(Me.TextBox1) Else MsgBox "БЯДА!!!", 64, "" End If
[/vba] С Val проще - преобразовывается левая числовая часть. Если справа есть текст - игнорируется. Если слева не число, в ячейку запишется ноль.vikttur
Сообщение отредактировал vikttur - Четверг, 10.01.2019, 23:03