小编DSM*_*DSM的帖子

包含多个数据透视表的VBA Excel文件大小非常大

我正在自动化在Excel中创建数据透视表的过程.我遇到的问题是我使用我的宏创建的数据透视表比我手动创建的数据透视表大.两个数据透视表看起来都相同,但文件大小差别很大.

IMG1

如上图所示,我的宏创建的大约是6倍!我怀疑这是我在创建数据透视表时缓存数据的方式.所以,这是我用来创建透视表的通用代码.

Sub pivottable1()

    Dim PSheet As Worksheet, DSheet As Worksheet
    Dim PCache As PivotCache
    Dim PTable As PivotTable
    Dim PField As PivotField
    Dim PRange As Range
    Dim LastRow As Long
    Dim LastCol As Long
    Dim PvtTable As PivotTable
    Dim SheetName As String
    Dim PTName As String

    SheetName = "MySheetName1"
    PTName = "PivotTable1"
    On Error Resume Next
    Application.DisplayAlerts = False
    Worksheets(SheetName).Delete
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Name = SheetName
    Application.DisplayAlerts = True

    Set PSheet = Worksheets(SheetName)
    Set DSheet = Worksheets(1)

    LastRow = DSheet.Cells(Rows.Count, …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

5
推荐指数
1
解决办法
142
查看次数

如何在 For Each 循环语句中跳过范围中的第一个元素?

我想做的事情比较简单。我有一个根据标准进行过滤的数据集,因此隐藏了工作表中的一些行。我为过滤后的数据设置了一个范围,该范围应该只经过示例代码中可见的单元格。

With MyDataWorksheet.AutoFilter.Range
     On Error Resume Next
     Set AutoFilterRange = .SpecialCells(xlCellTypeVisible)
     On Error GoTo 0
End With
Run Code Online (Sandbox Code Playgroud)

现在我想循环遍历 AutoFilterRange 变量中的所有数据,该变量应该捕获所有可见的行。我循环遍历它们,做类似的事情。

Sub aSub()

Dim DR As Range
For Each DR In AutoFilterRange
    'Do something here
Next DR

End Sub
Run Code Online (Sandbox Code Playgroud)

我在每个循环中使用它来处理可见行,但是我想跳过数据范围中的第一个元素,因为该元素行号包含我的标题名称。我认为做这样的事情将有助于解决我的问题,但它所做的只是转到标题行元素之后的下一个隐藏行元素。

For Each DR In AutoFilterRange.Offset(1,0)
    'Do something here
Next DR
Run Code Online (Sandbox Code Playgroud)

excel vba

4
推荐指数
1
解决办法
6629
查看次数

标签 统计

excel ×2

vba ×2

excel-vba ×1