excel - 当有更多数据时,使用 vba 在 excel 中创建数据透视失败
问题描述
我的 Excel:-
我创建 Pivot 的 VBA 代码:-
Sub Macro10()
'
' Macro10 Macro
'
' Keyboard Shortcut: Ctrl+q
'
Application.CutCopyMode = False
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C1:R20C4", Version:=6).CreatePivotTable TableDestination:= _
"Sheet2!R3C1", TableName:="PivotTable3", DefaultVersion:=6
Sheets("Sheet2").Select
Cells(3, 1).Select
End Sub
上面创建了 Pivot,但是当 excel 中有更多/更少的行时,它会给出错误。
解决方案
要动态查找工作表中最后使用的行,请尝试以下操作。
Ways To Find The Last Row
Sub FindingLastRow()
'PURPOSE: Different ways to find the last row number of a range
'SOURCE: www.TheSpreadsheetGuru.com
Dim sht As Worksheet
Dim LastRow As Long
Set sht = ActiveSheet
'Using Find Function (Provided by Bob Ulmas)
LastRow = sht.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
'Using SpecialCells Function
LastRow = sht.Cells.SpecialCells(xlCellTypeLastCell).Row
'Ctrl + Shift + End
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
'Using UsedRange
sht.UsedRange 'Refresh UsedRange
LastRow = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row
'Using Table Range
LastRow = sht.ListObjects("Table1").Range.Rows.Count
'Using Named Range
LastRow = sht.Range("MyNamedRange").Rows.Count
'Ctrl + Shift + Down (Range should be first cell in data set)
LastRow = sht.Range("A1").CurrentRegion.Rows.Count
End Sub
要查找最后一列,请尝试以下操作。
Ways To Find The Last Column
Sub FindingLastColumn()
'PURPOSE: Different ways to find the last column number of a range
'SOURCE: www.TheSpreadsheetGuru.com
Dim sht As Worksheet
Dim LastColumn As Long
Set sht = ThisWorkbook.Worksheets("Sheet1")
'Ctrl + Shift + End
LastColumn = sht.Cells(7, sht.Columns.Count).End(xlToLeft).Column
'Using UsedRange
sht.UsedRange 'Refresh UsedRange
LastColumn = sht.UsedRange.Columns(sht.UsedRange.Columns.Count).Column
'Using Table Range
LastColumn = sht.ListObjects("Table1").Range.Columns.Count
'Using Named Range
LastColumn = sht.Range("MyNamedRange").Columns.Count
'Ctrl + Shift + Right (Range should be first cell in data set)
LastColumn = sht.Range("A1").CurrentRegion.Columns.Count
End Sub
资源:
此外,打开宏记录器并单击您需要执行的步骤。将为您生成所有必要的代码。您将获得比您需要的更多的代码,但这很好,因为您可以简单地删除不需要的部分。使用鼠标,在宏代码内单击并反复按 F8 键以逐行浏览代码。这样做,你会学到很多东西!对您不了解的内容进行一些智能 Google 搜索,以填补空白。几天后,您将成为这方面的专家。
这是一个很好的链接供您开始使用。
https://www.contextures.com/excel-vba-pivot-table-field-list.html
推荐阅读
- rspec - shoulda-matchers 不匹配
- python - 如何获取每个打开窗口的名称列表并将其放入数据框中?
- android - 无法在 WebViewClient 的 shouldInterceptRequest 提供的 Webview 中清理视频
- php - WordPress 仍在请求旧网址
- angular - 使用 rxjs forkjoin 和 angular 10 http 拦截器,如何仅用多个 http 调用交换 1 个刷新令牌?
- julia - 测试是否在 Julia 中按下了某个键
- prettier - Prettier 作为开发依赖项
- windows - 我可以只使用命令安装 GDI+ 吗?
- java - spring 正在寻找第一个字母大写错误的 bean
- function - Terraform - 迭代模板中的对象列表