如果从数据库下载的数据超出了组合框的范围,新的项目就不会显示出来。 为了解决这个问题,列表框或组合框下面的范围需要扩展或收缩以匹配数据。 本文研究了如何自动执行此操作。
假定读者已显示 Developer 功能区并且熟悉 VBA 编辑器。 如果没有,请谷歌“Excel Developer Tab”或“Excel Code Window”。
显示组合框的一种专业方法是根据需要扩大或缩小范围。 例如:
动态范围的关键是使用函数 =countA 监视相关列中填充行的数量。 此函数计算一系列单元格中填充的元素,直到它到达最后一个; 在上图中的第一个图表的情况下,那将是第 11 行。
要自动维护一个范围,需要定义名称来跟踪填充的行数。 例如,我们使用 eCol(结束列)和 eRow(结束行)来定义范围的边界。 我们填充的行越多,eRow 的价值就越大。
上面定义的名称已将列表设置为一列宽 (eCol = 1),由 eCol (eRow = 11) 中填充的行数
最后,标题出现在“A2:A”和 eRow 范围内。 您会注意到 Index 函数用于在名为“Titles”的范围内建立最后一个单元格。 实际上,范围“A2:A”和 eRow 在此阶段转换为“A2:A11”。
我们可以在工作簿打开时自动设置动态范围,方法是使用在工作簿可见之前运行的 Auto_open 子过程。
守则
打开工作簿并使用组合框和一些数据填充它。 可以找到本练习中使用的示例工作簿 开始.
打开 VBA 代码窗口并插入一个模块。 将下面的代码复制到模块中。
Auto_Open 事件设置动态范围“标题”的最后一行和最后一列值,并记录随后所做的更改。
Sub auto_open()
Dim eRow As Integer, eCol As Integer, i As Long
On Error Resume Next
'Clear the present define names, to avoid any duplications
activeworkbook.Names("eCol").Delete
activeworkbook.Names("eRow").Delete
activeworkbook.Names("Titles").Delete
Range("A1").Select
'Titles will appear in the first column, A in this case
eCol = 1
'Find the last populated row
eRow = Sheets("Main").Cells(Rows.Count, eCol).End(xlUp).Row
'Define the names
activeworkbook.Names.Add Name:="eCol", RefersTo:="=COUNTA($1:$1)"
activeworkbook.Names.Add Name:="eRow", RefersToR1C1:="=COUNTA(C" & ColNo & ")"
activeworkbook.Names.Add Name:="Titles", RefersTo:="=A2:INDEX($2:$200," & "eRow," & "eCol)"
End Sub
Sub DropDown1_Change()
MsgBox "Directed by " & Cells(2, 5)
End Sub
注意:为了方便查看,所有内容都放在同一页面上。通常情况下,A 列和 B 列以及 D 列和 E 列的值会位于另一个可能隐藏的工作表中。另请注意,本练习中未使用第二列(B 列)来定义范围;B 列的值是通过组合框的单元格链接属性以常规方式获取的(D2 表示选择范围中的第三个元素,该范围从 A2 开始,并结合 E3 中的 INDEX 函数来查找目录 (=INDEX(B:B,D2+1,1)))。
保存工作簿,然后重新打开它。 组合框最初将由 Auto_open 填充。 向 A 列和 B 列添加项目,并观察组合框的变化。
抢救损坏的 Excel 文件
有时,Excel 文件可能会在 Excel 意外崩溃后损坏。 如果您有备份,那么您可以简单地使用备份恢复数据。 否则,您可能需要寻求专业的专家或工具来恢复 损坏的 Excel 文件。
作者简介:
Felix Hooker 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 rar修复 和sql恢复软件产品。 欲了解更多信息,请访问 datanumen.com



