Почему в списке не отображается самая последняя запись в пользовательской форме Excel VBA? - PullRequest
0 голосов
/ 30 мая 2018

Строка 6 должна быть включена в отображение списка.

My Worksheet

Но это выглядит так: Delay

Это происходит только в том случае, если есть либо дебетовая запись, но нет кредитной записи до нажатия кнопки «Добавить в таблицу».Или, если есть запись о кредите, но нет дебетовой записи до нажатия кнопки «Добавить в таблицу».Все последующие записи будут иметь задержку в 1 запись после этого.

Например, когда я добавлю еще одну строку данных: Additional data in worksheet

Form display after additional data

Окно свойств списка показано ниже:

listbox property

Список заполнен с использованием показанной ссылки на ячейкуниже: Cell reference

Оценка значений поиска и максимальных значений на основе решения Пэ: Evaluation

Фотография диспетчера имен с решением: Table Formula

Как выглядит список (список пуст): Empty List Box

OFFSET формула с новым кодом возвращает a #VALUE ошибка: Error

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Я просто не могу заставить его работать тогда, как обычно, поэтому я понял, что есть свойство RowSource для Listbox объекта

If Application.WorksheetFunction.Max(Worksheets("Table").Range("A" & Rows.Count).End(xlUp).Row, Worksheets("Table").Range("C" & Rows.Count).End(xlUp).Row) > 1 Then
    ListBox6.RowSource = "Table!A2:D" & Application.WorksheetFunction.Max(Worksheets("Table").Range("A" & Rows.Count).End(xlUp).Row, Worksheets("Table").Range("C" & Rows.Count).End(xlUp).Row)
End If
0 голосов
/ 30 мая 2018

Чтобы получить позицию последней использованной ячейки в столбце A по формуле, используйте

=LOOKUP(2,1/(A:A<>""),ROW(A:A))

. Вы можете использовать ее в Offset вместо COUNTA.


*.1008 * Как это работает?
  • (A:A<>"") возвращает массив значений TRUE и FALSE:
    TRUE для ячейки с данными, FALSE для пустой ячейки
    Таким образом, массив выглядит примерно так: {TRUE, FALSE, TRUE, …}
  • Поскольку 1/TRUE = 1 и 1/FALSE = #DIV/0!, этот 1/(A:A<>"") возвращает массив 1 и #DIV/0!, который используется каквектор поиска.
    Таким образом, массив равен {1, #DIV/0!, 1, …}
  • Поскольку LOOKUP всегда будет соответствовать следующему наименьшему значению, если точное совпадение не найдено, оно будет соответствовать последнему использованному значению в этом массиве, если мы ищем2 (поскольку в вашем массиве только 1 с, он соответствует последней 1, что означает последнюю ячейку с данными).
  • ROW(A:A) наконец возвращает номер строки этого найденного значения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...