Excel найти значение в таблице на основе имени и изменить его в VBA - PullRequest
0 голосов
/ 01 апреля 2020

В настоящее время я работаю над проектом и намочу ноги в VBA. Сейчас мне нужно найти значение в определенной таблице c на основе имени сотрудника и изменить это значение. Например, в таблице январь:

Name;BirthDate;BSN;Salary
P. Decker;19-8-1988;123;$10.000
J. Jackson;20-6-1988;456;$12.000
T. Roberts;18-2-1975;789;$15.000

Я хотел бы изменить зарплату Дж. Джексона.

У меня возникли проблемы с поиском решения для этого. Я нашел несколько способов изменить значение в ячейке, например, с помощью

Sub GetValueFromTable()
myValue_1 = InputBox("Fill in name", "Name Employee")
myValue_2 = InputBox("What do you want to change", "What?")
Cells(1, 3) = myValue_1
End Sub

Но таким образом я не могу ссылаться на таблицу или ставить имена таблиц или что-нибудь подобное, в этом случае я мог бы использовать myValue_2 как " Зарплата ", но формулы, которые я нашел, работают только с числами, а не со ссылками на ячейки.

Может ли кто-нибудь помочь мне здесь, чтобы я мог заставить это работать?

Спасибо!


РЕДАКТИРОВАТЬ:

Хорошо, после нескольких часов бездействия, я прямо сейчас получил это:

Sub Testnumberounodostreina()
Dim tbl As ListObject
Dim rng1 As Range
Dim cel1 As Range
Dim col As Long
Dim row As Long
Set tbl = ActiveSheet.ListObjects("January")
Set rng1 = tbl.HeaderRowRange
Set rng2 = tbl.DataBodyRange
Set cel1 = rng1.Find(What:="Salary", LookAt:=xlWhole)
Set cel2 = rng2.Find(What:="J. Jackson", LookAt:=xlWhole)
If cel1 Is Nothing Then
    Beep
Else
    cel1.EntireColumn.Hidden = True
    cel2.EntireColumn.Hidden = True
    ' --- or ----
    col = cel1.Column
    row = cell.row
    Cells(row, col).Value = "15,000"
End If
End Sub

Запуск этого скрипта дает мне следующую ошибку:

«Ошибка времени выполнения« 424 »: требуется объект.»

Предполагается, что эта формула получит значение заголовка столбца и строки на основе «Зарплата» и «Дж. Джексон», а затем он должен изменить значение в этой ячейке на «15.000».

То, что этот код делает прямо сейчас, - это найти заголовок столбца на основе «Зарплата» и вернуть значение этого столбца. То, что он не делает правильно, это найти номер строки, где находится "Дж. Джексон". Вот почему я получаю эту ошибку.

Может ли кто-нибудь помочь мне получить значение номера строки, где "J. Jackson"?

Спасибо


РЕДАКТИРОВАТЬ:

Видимо были некоторые опечатки, теперь это работает!

код:

Sub Testnumberounodostreina()
Dim tbl As ListObject
Dim rng1 As Range
Dim cel1 As Range
Dim cel2 As Range
Dim col As Long
Dim row As Long
Set tbl = ActiveSheet.ListObjects("January")
Set rng1 = tbl.HeaderRowRange
Set rng2 = tbl.DataBodyRange
Set cel1 = rng1.Find(What:="Salary", LookAt:=xlWhole)
Set cel2 = rng2.Find(What:="J. Jackson", LookAt:=xlWhole)
If cel1 Is Nothing Then
    Beep
Else
    cel1.EntireColumn.Hidden = True
    cel2.EntireColumn.Hidden = True
    ' --- or ----
    col = cel1.Column
    row = cel2.row
    Cells(row, col).Value = "25,000"
End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...