我正在运行一个宏,它要求一个工作表名称和一个参考单元格,然后选择一系列单元格,围绕我们选择的单元格。 将过滤器应用于我的数据后,某些行会被隐藏,因为它们不是必需的。 问题是,宏不考虑这一点并计算隐藏的行。 这是我在宏的原始版本中使用的代码:
.....应用一些InputBox并搜索用户的值后,执行以下行:
Range(ActiveCell.Offset(90, 0), ActiveCell.Offset(-252, 2)).Select
Selection.Copy
这样,隐藏行包含在选择中。 我尝试了以下修改
Range(ActiveCell.Offset(90, 0), ActiveCell.Offset(-252, 2)).SpecialCells(xlCellTypeVisible).Select
Selection.Copy
然而没有成功。
我想知道,是否有人可以建议使用ActiveCell.Offset
与SpecialCells(xlCellTypeVisible)
结合使用,从而导致宏的上述功能 - 选择一系列单元格,避免过滤后隐藏的行?
答案 0 :(得分:4)
要从一系列选定单元格中仅选择可见单元格,可以使用以下代码行:
Selection.SpecialCells(xlCellTypeVisible).Select
就像在这个例子中一样:
Range(ActiveCell.Offset(90, 0), ActiveCell.Offset(-252, 2)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
下面的代码是一个关于如何计算行数的示例。 所以,但是你需要考虑一个问题。
如果将选择粘贴到原始工作表,则可能会在复制选区的区域中存在隐藏的行。 如果是这样,那么您在那里复制的文本也将被隐藏。
因此,您必须将数据复制到新工作表以避免该问题,或者您必须复制工作表1底部的数据。
Option Explicit
'Define a Constant for the Amount of Rows you Need
Private Const ConstAmountRows As Integer = 40
Sub Test()
Dim intCountedRows As Integer
Dim idx As Integer
Dim intDifference As Integer
idx = 0
Do
If Not (intCountedRows = ConstAmountRows) Then
intCountedRows = ConstAmountRows
idx = idx + 1
End If
Sheets("Sheet1").Select
'Select the Range with the Amount of Rows you need ideally
Range("A1:A" & intCountedRows + idx).Select
'Select only the Visible Cells
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Sheets("Sheet2").Select 'Select another Sheet
'***-> Her you can select the Place you want to Paste the Text<-***
Range("B1").Select
ActiveSheet.Paste
'*** Count the Rows that you Paste
intCountedRows = Selection.Rows.Count
'if the Counted Rows are not equal to the Amount. Repeat
Loop While Not (intCountedRows >= ConstAmountRows)
End Sub