excel - 获取对自动过滤表中下一个可见单元格的引用

标签 excel vba

我有一个位于我的电子表格顶部的用户窗体,它只显示包含当前选定单元格的行中的信息。表单上的按钮允许用户逐行向上/向下移动电子表格。例如,当点击“下一条记录”按钮时,执行的代码是这样的:

Cells(ActiveCell.Row + 1, ActiveCell.Column).Select
LoadValues

即使用户过滤数据然后加载表单,我也希望它能够工作。但是,使用上面的代码,它想循环遍历所有单元格,而不仅仅是过滤后仍然可见的单元格。我已经看到了立即循环仅通过可见单元格的解决方案,例如,

For Each viscell In rng.SpecialCells(xlCellTypeVisible)
    ...
Next viscell

因此,似乎应该有一种更好、更直接的方法来执行此操作,而不是遍历所有行,直到我使用 .Hidden = False 到达下一个行,但我似乎做不到弄清楚如何获取对“下一个可见单元格”的引用以便选择它。

任何指针将不胜感激。谢谢。

最佳答案

这是一种快速激活过滤范围内第一个非空白可见单元格的方法。只需将 'Range("A1")' 更改为您想要搜索的任何范围。还要考虑是否需要 xlByColumns 或 xlByRows。

ActiveSheet.Cells.SpecialCells(xlCellTypeVisible).Find(What:="*", _
    After:=ActiveSheet.Range("A1"), LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByColumns, _
    SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate

我建议尽可能使用表,因为它们具有易于引用的内置变量命名范围。

这是另一个使用表格的示例。它的目标是搜索特定的列,因此它会更快。

只需找到 TABLE_NAME 和 COLUMN_NAME 并将其替换为您的值。

ActiveSheet.Range("TABLE_NAME[[#All], COLUMN_NAME]]").SpecialCells(xlCellTypeVisible).Find _
    (What:="*", After:=ActiveSheet.Range("TABLE_NAME[[#Headers],[COLUMN_NAME]]"), _
    LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByColumns, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate

不需要循环,因为它是基于 Excel 的“查找”功能构建的。

只是一个提示,您也可以使用它在单独的工作表上获取此类单元格的数据,而无需激活/选择它。

只需找到 Dbl_EXAMPLE、SHEET_NAME、TABLE_NAME 和 COLUMN_NAME 并将其替换为您的引用。

Dim Dbl_EXAMPLE as Double

Dbl_EXAMPLE = Sheets("SHEET_NAME").Range("TABLE_NAME[[#All], COLUMN_NAME]]").SpecialCells(xlCellTypeVisible).Find _
    (What:="*", After:=Sheets("SHEET_NAME").Range("TABLE_NAME[[#Headers],[COLUMN_NAME]]"), _
    LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByColumns, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Value2

只需将末尾的“.Value2”替换为您要查找的任何属性。

例子:

.公式 。排 .列

名单还在继续

关于excel - 获取对自动过滤表中下一个可见单元格的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26916945/

相关文章:

c# - Excel._Worksheet.Columns.Autofit() 方法挂起

VBA 用数据识别第一行和最后一行

excel - VBA TypeText Word Wrapping 内联与前一行的缩进

vba - 在 VBA 和 VBS 中创建对象

excel - 无效或不合格的引用

java - 使用 Java 和 JXL API 编辑 Excel 电子表格

php - 如何跳过有关使用 Maatwebsite/Laravel-Excel 导入 excel laravel 的行

vba - 根据 Excel 单元格中的值设置 RGB 颜色

excel - 如何 Swagger 发送 REST 响应 excel 文件?

excel - CONCATENATE(IF()) - 如何简化当前的解决方案?