【问题标题】:Selecting dynamic, filtered range in VBA在 VBA 中选择动态过滤范围
【发布时间】:2017-06-12 17:42:06
【问题描述】:

我正在尝试选择一个动态范围的过滤数据,该范围跨越 col.答:上校。 J 不选择标题(在第 1 行)。从那里我需要将其复制并粘贴到一个新工作表中,我将在其中进一步操作它,但我无法想出一种有效或实用的方法来做到这一点。根据我在另一个论坛上找到的一些代码,我能够在单个列中选择所有“可见单元格”,但我在尝试选择整个范围时遇到了问题。我对 vba 还是很陌生,所以请原谅我的语法,但我在下面发布的代码是试图遍历 Rows.Count 和 i,它是一个整数 1-10。如果您对如何更好、更有效地做到这一点有任何建议,我将不胜感激。

Sub SelectVisibleInColD()
    Dim lRow As Long, i As Integer
    Set i = 1
Do While i <= 10

    With ActiveSheet
        lRow = .Cells(.Rows.Count, i).End(xlUp).Row
        If lRow < 3 Then Exit Sub
        .Cells(1, 1).Offset(1, 0).Resize(lRow - 1).SpecialCells(xlCellTypeVisible).Select
    End With

 i = i + 1
 Loop
End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可以使用ActiveSheetRange 属性选择范围。您已经有了最后一行,并且您知道标题在第一行,因此您的范围从位置 A2 开始,到列 J 的最后一行

    ActiveSheet.Range("A2:J"&lRow).SpecialCells(xlCellTypeVisible)
    

    如果要复制此范围,请使用Copy 之类的函数

    yourRangeAsAbove.Copy
    

    此函数仅将选择移动到内存,粘贴它,构建您的目标范围并调用PasteSpecial 函数。

    【讨论】:

    • 感谢您的帮助!
    【解决方案2】:

    我在谷歌搜索我的问题时遇到了这个答案:删除 vba 中的过滤选择。 但是,尝试您的答案 &lRow 会给我一个运行时错误 1004、应用程序定义或对象定义错误

    我解决了这个问题 ActiveSheet.Range("A2:G" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Delete

    对于那些也可能遇到相同问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 2013-08-30
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多