Как использовать формулу ВПР vba с двух листов?

#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.