在VBA中获取最后一个单元格的问题

我想写一个代码来创build一个数据透视表(作为一个更大的代码的一部分),我只是不能得到它来检测源数据。 不幸的是,每次代码运行时,数据都是不同的行数,所以我希望代码能够自动find数据的最后一个单元。 我不断收到错误,说明一个对象是必需的或variables没有定义。 尽pipe去了VBA错误指南,我无法find什么是错的。

任何人都可以看到这里的问题是什么? 或者即使有一个更有效的方法来做到这一点?

Sub CreatePivotTable() Dim sht As Worksheet Dim pvtCache As PivotCache Dim pvt As PivotTable Dim StartPvt As String Dim SrcData As Range, LRow As Range, LCol As Range 'Determine the data range you want to pivot Set LRow = Cells(Rows.Count, 1).End(xlUp).Row Set LCol = Cells(1, Columns.Count).End(xlToLeft).Column Set SrcData = Worksheets("Raw Data").Range("A1:Cells(LRow,LCol)") 'Create a new worksheet Sheets.Add.Name = "Pivot Table" 'Where do you want Pivot Table to start? StartPvt = Worksheets("Occupancy").Range("A15") 'Create Pivot Cache from Source Data Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData) 'Create Pivot table from Pivot Cache Set pvt = pvtCache.CreatePivotTable(TableDestination:=StartPvt, TableName:="Occupancy") 'Create the headings and row and column orientation pvt.PivotFields("Precinct").Orientation = xlPageField pvt.PivotFields("Number").Orientation.xlDataField.Function = xlCount pvt.PivotFields("Captured Date").Orientation.xlColumnField.Position = 1 pvt.PivotFields("Captured Session").Orientation.xlColumnField.Position = 2 pvt.PivotFields("Session Location").Orientation.xlRowField.Position = 1 'Turn on Automatic updates/calculations --like screenupdating to speed up code pvt.ManualUpdate = False End Sub 

引号内的任何内容都是一个string,因此"A1:Cells(LRow,LCol)"变成了一个string,并且不包含单元格的地址(LRow,LCol)

更改

 Set SrcData = Worksheets("Raw Data").Range("A1:Cells(LRow,LCol)") 

 LastCol = Split(Cells(, LCol).Address, "$")(1) Set SrcData = Worksheets("Raw Data").Range("A1:" & LastCol & LRow) 

或对此

 Set SrcData = Worksheets("Raw Data").Range("A1:" & Cells(LRow,LCol).Address(False, False)) 

也改变

 Dim LRow As Range, LCol As Range Set LRow = Cells(Rows.Count, 1).End(xlUp).Row Set LCol = Cells(1, Columns.Count).End(xlToLeft).Column 

 Dim LRow As Long, LCol As Long LRow = Cells(Rows.Count, 1).End(xlUp).Row LCol = Cells(1, Columns.Count).End(xlToLeft).Column 

使用一个表来存储数据,并给它一个名字。 然后将枢纽源设置为表名称