#excel #vba #vlookup #userform #data-entry
#excel #vba #ВПР #пользовательская форма #ввод данных
Вопрос:
У меня есть два листа, первый из которых называется Sheet8 для основной таблицы, которая может использоваться формой ввода данных для ввода данных в эту таблицу, а второй называется Sheet9, который включает таблицу для vlookup. То, что я хочу, находится в пользовательской форме ввода данных, как только я ввожу имя, дисциплина создается автоматически на основе этого имени.
Скриншот ввода данных для основной таблицы в sheet8
Скриншот таблицы sheet9
Код для кнопки сохранения
Private Sub btnSave_Click()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Sheet8")
Dim n As Long
n = sh.Range("A" amp; Application.Rows.Count).End(xlUp).Row
sh.Unprotect "1234"
sh.Range("A" amp; n 1).Value = Me.txtDate.Value
sh.Range("B" amp; n 1).Value = Me.txtName.Value
sh.Range("C" amp; n 1).Value = Me.txtProjNo.Value
sh.Range("D" amp; n 1).Value = Me.txtProjTitle.Value
sh.Range("E" amp; n 1).Value = Me.txtBVEntity.Value
sh.Range("F" amp; n 1).Value = Me.txtZIG.Value
sh.Range("G" amp; n 1).Value = Me.txtSpenthrs.Value
sh.Range("H" amp; n 1).Value = Me.comboCategory.Value
sh.Range("I" amp; n 1).Value = Me.txtDiscipline.Value
sh.Range("J" amp; n 1).Value = Me.txtSCV.Value
sh.Range("K" amp; n 1).Value = Me.txtTotSCV.Value
sh.Range("L" amp; n 1).Value = Me.txtCotMER.Value
sh.Range("M" amp; n 1).Value = Me.txtBudgethrs.Value
sh.Range("N" amp; n 1).Value = Me.txtBudget.Value
sh.Range("O" amp; n 1).Value = Me.txtProgress.Value
sh.Range("P" amp; n 1).Value = Me.txtEndDate.Value
sh.Protect "1234"
Код для текстового поля Name
Private Sub txtName_AfterUpdate()
If WorksheetFunction.CountIf(Sheet9.Range("C:D"), Me.txtName.Value) = 0 Then
MsgBox "This Name is Invalid."
Me.txtName.Value = ""
Exit Sub
End If
With Me
.txtDiscipline = Application.WorksheetFunction.VLookup(Me.txtName, Sheet9.Range("Lookup"), 4, 0)
End With
End Sub
Комментарии:
1. Попробуйте
.txtDiscipline.Text = Application.WorksheetFunction.Vlookup( ...
2. ну, =vlookup(введенное имя_имя,C3:D14,2,0) — это простое начало. вы могли бы использовать index() с match() следующим образом =index(D3:D14,match(entered_name,C3:C14,0)), чтобы сделать то же самое. Но почему 4 в вашем ВПР в коде, или это что-то еще?
3. что такое
Sheet9.Range("Lookup")
? Есть ли в нем 4 столбца?4. @Solar Mike, да, 4 — это номер столбца, который равен D, который начинается с столбца = 4.
5. Если вы ищете имя в col C, а результат находится в col D, тогда оно должно быть 2, а не 4.