为什么列表框不显示Excel VBA用户表单中的最新条目?

时间:2018-05-30 06:56:43

标签: excel excel-formula listbox

第6行应包含在列表框显示中。

My Worksheet

但它看起来像这样: Delay

只有在单击“添加到表格”按钮之前存在借记条目但没有信用条目时才会发生这种情况。或者,如果存在信用条目,但在单击“添加到表格”按钮之前没有借记条目。所有后续条目在此之后将有1个条目滞后。

例如,当我添加另一行数据时: Additional data in worksheet

Form display after additional data

列表框的属性窗口如下所示:

listbox property

使用下面显示的单元格引用填充列表框: Cell reference

根据Peh的解决方案评估查找值和最大值: Evaluation

带有解决方案的名称管理器照片: Table Formula

列表框的外观如何(列表框为空): Empty List Box

带有新代码的OFFSET公式返回#VALUE错误: Error

2 个答案:

答案 0 :(得分:1)

通过公式使用

获取A列中最后一个使用过的单元格的位置
=LOOKUP(2,1/(A:A<>""),ROW(A:A))

您可以在Offset而不是COUNTA中使用它。

它是如何运作的?

  • (A:A<>"")会返回TRUEFALSE值的数组:
    TRUE表示包含数据的单元格,FALSE表示空单元格 所以数组就像{TRUE, FALSE, TRUE, …}
  • 由于1/TRUE = 11/FALSE = #DIV/0!1/(A:A<>"")会返回一个1#DIV/0!数组,用作查找向量。
    所以数组是{1, #DIV/0!, 1, …}
  • 如果找不到完全匹配,LOOKUP将始终匹配下一个最小值,如果我们查找2,它将匹配该数组中最后使用的值(因为数组中只有1个)它匹配最后一个1,它代表最后一个带数据的单元格。
  • ROW(A:A)最后返回找到的值的行号

答案 1 :(得分:0)

我似乎无法正常工作,所以我意识到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