2016-10-17 4 views
0

Я только что начал работать с 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, а не к таблицам , Я бы очень признателен за некоторые рекомендации, спасибо.

+0

Я не следую точно, потому что я не вижу остальную часть вашего кода, но ознакомьтесь с target.row для начала ... – MacroMarc

+0

Тогда мне придется отредактировать вопрос, извиняюсь. Что касается Target.row, это даст мне абсолютную строку, но не строку, относящуюся к таблице. Чтобы сделать это более ясным, если моя таблица начинается с A5, тогда строка secound в заголовке подсчета таблицы A7. Target.row даст мне 7. Но для lo.Listrow (index) это не 7, индекс будет равен 2. Снова извините за отсутствие ясности, я отредактирую, когда вернусь домой. – KlRod

+0

Ваша 'FindBankInfo' выглядит как подпрограмма, но я полагаю, что ее можно легко изменить на функцию. Почему бы просто не использовать его как UDF и поместить его как формулу в соответствующий столбец, а не запускать скрипт через весь лист, найти строку, которую вы ищете, а затем записать значение? – nbayly

ответ

0

Преобразуйте свою подпрограмму в UDF и используйте формулу на вашем столе.

Смежные вопросы