- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力寻找一种从 ListObject 表中删除过滤/隐藏行的方法。
过滤不是通过代码执行的,而是由用户使用表头过滤器执行的。我想在取消列出 ListObject 表并执行小计操作之前删除过滤/隐藏的行。如果我在取消列出表格之前没有删除过滤/隐藏的行,这些行会重新出现。
当前代码:
Sub SubTotalParClassification(ReportSheetTitle)
Dim ws As Worksheet
Dim drng As Range
Endcol = ColCalculationEndIndex
Set ws = Sheets(ReportSheetTitle)
'CODE TO REMOVE HIDDEN/FILTERED ROWS
Set lo = ActiveSheet.ListObjects("Entrée")
For i = 1 To lo.ListRows.Count Step 1
If Rows(lo.ListRows(i).Range.Row).Hidden = True Then
lo.ListRows(i).Delete
Next
' convert the table back to a range to be able to build subtotal
ws.ListObjects("Entrée").Unlist
With ws
'Select range to Subtotal
Set drng = .Range(.Cells(REPORTHEADERROW, REPORTSSTARTCOL), .Cells(EndRow, Endcol))
'apply Excel SubTotal function
.Cells.RemoveSubtotal
drng.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(Endcol - 6, Endcol - 5, Endcol - 4, Endcol - 3, Endcol - 2, Endcol - 1)
End With
'Update EndRow
EndRow = ActiveSheet.Cells(Rows.Count, REPORTSSTARTCOL).End(xlUp).Row
End Sub
最佳答案
不幸的是,Range.SpecialCells method xlCellTypeInvisible 没有具体参数,xlCellTypeVisible 只有一个.要收集所有隐藏的行,我们需要找到 .DataBodyRange property 的补充。和可见行,而不是 Intersect .一个简短的 UDF 可以解决这个问题。
一次 Union隐藏行已经建立,您不能简单地删除这些行;您必须循环浏览 Range.Areas property .每个区域将包含一个或多个连续行,并且可以删除这些行。
Option Explicit
Sub wqewret()
SubTotalParClassification "Sheet3"
End Sub
Sub SubTotalParClassification(ReportSheetTitle)
Dim a As Long, delrng As Range
With Worksheets(ReportSheetTitle)
With .ListObjects("Entrée")
'get the compliment of databody range and visible cells
Set delrng = complimentRange(.DataBodyRange, .DataBodyRange.SpecialCells(xlCellTypeVisible))
Debug.Print delrng.Address(0, 0)
'got the invisible cells, loop through the areas backwards to delete
For a = delrng.Areas.Count To 1 Step -1
delrng.Areas(a).EntireRow.Delete
Next a
End With
End With
End Sub
Function complimentRange(bdyrng As Range, visrng As Range)
Dim rng As Range, invisrng As Range
For Each rng In bdyrng.Columns(1).Cells
If Intersect(visrng, rng) Is Nothing Then
If invisrng Is Nothing Then
Set invisrng = rng
Else
Set invisrng = Union(invisrng, rng)
End If
End If
Next rng
Set complimentRange = invisrng
End Function
关于vba - Excel ListObject 表 - 从 ListObject 表中删除过滤/隐藏的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36336783/
在我的一个工作表中,我有一个 Private Sub BuggingVba() 那应该将表中的数据替换为值数组 Dim MyTable As ListObject, myData() As V
我正在努力寻找一种从 ListObject 表中删除过滤/隐藏行的方法。 过滤不是通过代码执行的,而是由用户使用表头过滤器执行的。我想在取消列出 ListObject 表并执行小计操作之前删除过滤/隐
我需要访问工作簿的所有工作表中所有列表对象的选定事件,但是当我访问 worksheet.listobject 时,该对象显然属于 Microsoft.Office.Interop.Excel.List
是否可以同时过滤单个表中的多个字段? 我有一个过滤器,但不确定如何添加第二个字段。 wS.ListObjects("StructureTable").Range.AutoFilter Field:=1
我有一个 Excel 表格,其中包含一个标题行和一个数据正文行。我想计算数据主体行数。当我试图检查我的表有多少行时 Set myWorkSheet= ActiveWorkbook.Worksheets
如果我循环浏览工作表并想要测试给定工作表中是否存在任何 ListObject,我该如何执行此操作?我试过这个: Dim daysoftheweek As Worksheet For Each days
我有这个当前函数,它在遍历表时清除第 2 列值等于 -1 的行。我遇到的问题是我不想检查表中的最后一行。我该怎么做呢? foreach (Excel.ListRow lr in xlWorkBook.
如何简单地将数组中的值写入整个 ListObject一次列(仅数据行,不包括标题)?我找到了一个解决方案,但我认为它不漂亮: ' needs: ActiveSheet with ListObject
我试图让我的代码仅通过表引用范围(这样如果我从表中添加或删除列,代码将不会更改)。 我有一个名为 MyTable 的表。 此表有一个标题“MyHeader”。 在这里,我得到了表格的最后一行: dim
我有一个名为 UFCustInfo 的用户表单。在工作表区域,我有一个宏来显示表单 - Private Sub CmdShowInputForm() UFCustInfo.Show End S
我正在使用下面的代码来查找 ListObject 中最后一个可见行的 Sheet.Row。它似乎工作正常,但我想知道当 ListObject 非常大时是否有更快的方法来做到这一点。 干杯 Functi
我从 D3 单元格开始在工作表上添加一个新的 ListObject,然后创建列并将它们与 XMLMap 绑定(bind)。这是我的代码: Excel.Worksheet she
我正在尝试将 listobject 过滤数据提取到新工作簿。但是,会提取所有数据,而不仅仅是过滤后的数据。 Set loop_obj = wsCopy.ListObjects(1) loop_obj.
我想遍历Table1的一列,如果Table2的同一列名中缺少该值,则将其插入Table2的末尾。 下面的代码从 Table1 中插入确切的行数,但它只插入最后一行的值。 例如表格1: 列名 值(val
我有一个用户表单,用于将新数据行输入到同步到 Sharepoint 列表的动态表中。我只需要用于删除表中事件行的 VBA 代码。 我知道此代码用于删除表中的特定行: Selection.ListObj
我正在尝试编写一个宏,它遍历工作簿中的所有表,然后将每个表的名称以“TableName[#All]”的形式添加到数组中。 请参阅下面不完整的代码 Sub NewShopPage() ' ' Macro
我有一个包含约 500 行的 ListObject 表,在命名范围内还有 4 个值。 对于 500 行,可能有 30 个重复(随机)出现的唯一值,我想删除其值不在指定范围内的所有行。 我有以下工作,但
如何将记录集中的数据填充到列表对象中? 下面的代码不完全工作: oCN.ConnectionString = "DRIVER={SQL Server};Server=SRVSQL;Database=T
我有一个事件会触发 lambda 代码,该代码会尝试列出一个存储桶中的所有对象,然后将它们复制到另一个存储桶。 通过事件调用处理程序的代码 const cfnHandlerWrapper = asyn
我有一个名为 yourArray 的数组。 var yourArray = []; 当我从 s3 获取带有 listObjects 的对象名称时,我想将此对象名称推送到数组中。 var params
我是一名优秀的程序员,十分优秀!