Я только что начал работать с VBA для прохождения стажировки, и у меня небольшая проблема с моим текущим проектом. Я уверен, что это прямое исправление, которое я не вижу, поскольку для него нет ничего онлайн.Excel VBA работает с ячейкой внутри таблицы с учетом ее диапазона
Мой рабочий лист принимает пару входных значений в строке списка объектов и возвращает соответствующие значения из сопоставления в другие столбцы в той же строке.
Я хочу, чтобы работать только подлодку FindBankInfo для строки, которые пользователь изменил
If Not Intersect(Target, lo.ListColumns("Document Type").Range) Is Nothing Or Not Intersect(Target, lo.ListColumns("Bank").Range) Is Nothing _
Or Not Intersect(Target, lo.ListColumns("Transit Type").Range) Is Nothing Then
'rowCount in the sub is used as lo.listrow(rowcount), it's the table row I am working with
FindBankInfo lo, loMap, loMap2, rowCount
End If
я могу сделать эту работу, как этот
If Not Intersect(Target, lo.ListColumns("Document Type").Range) Is Nothing Or Not Intersect(Target, lo.ListColumns("Bank").Range) Is Nothing _
Or Not Intersect(Target, lo.ListColumns("Transit Type").Range) Is Nothing Then
For Each lr in lo.ListRows
rowCount = rowCount + 1
FindBankInfo lo, loMap, loMap2, rowCount
Next lr
End If
Как это он проходит через каждую строку каждого время что-то меняется, а в sub я пропускаю, если он уже заполнен. Но это кажется глупым и неэффективным и медленным, если есть много строк, поскольку я проверяю пустые строки между заполненными строками, поэтому я не могу просто закончить пустым.
Что мне нужно, задан Target, как я могу преобразовать этот диапазон цели в соответствующий диапазон ListObject и получить номер строки списка ListObject ???
Target.ListObject дает мне подходящий диапазон для моей таблицы, поэтому я знаю, что он может коснуться его, и я могу получить точный диапазон, с которым я хочу взаимодействовать, но номер строки имеет отношение к листам rowcount, а не к таблицам , Я бы очень признателен за некоторые рекомендации, спасибо.
Я не следую точно, потому что я не вижу остальную часть вашего кода, но ознакомьтесь с target.row для начала ... – MacroMarc
Тогда мне придется отредактировать вопрос, извиняюсь. Что касается Target.row, это даст мне абсолютную строку, но не строку, относящуюся к таблице. Чтобы сделать это более ясным, если моя таблица начинается с A5, тогда строка secound в заголовке подсчета таблицы A7. Target.row даст мне 7. Но для lo.Listrow (index) это не 7, индекс будет равен 2. Снова извините за отсутствие ясности, я отредактирую, когда вернусь домой. – KlRod
Ваша 'FindBankInfo' выглядит как подпрограмма, но я полагаю, что ее можно легко изменить на функцию. Почему бы просто не использовать его как UDF и поместить его как формулу в соответствующий столбец, а не запускать скрипт через весь лист, найти строку, которую вы ищете, а затем записать значение? – nbayly