我是 VBA 编码的新手,并试图创建一个 Excel 宏,它将基于动态数据范围创建一个数据透视表。我正在使用 Excel 2016。
数据中的列数将保持不变,但行数是动态的。
在我的数据工作表中,BZ 列包含数据集中有多少记录的计数。例如,如果数据集中有 30 条记录,则 BZ 列中的每个值都是 30。(此数据是使用 DDE 从 SAS 导入的,这就是我选择这种方法的原因)。因此,我在下面的 lastRow 变量中添加了 1 以包含列名。
我的 VBA 宏代码目前如下:
Sub Macro1()
Dim xlsPath As String
Dim xlsFile As String
Dim lastRow As Integer
Dim SrcData As String
Dim StartPvt As String
Dim pvtCache As PivotCache
Dim pvt As PivotTable
xlsxPath = "N:\Analytics\Test\DDE\"
xlsxFile = "Test.xlsx"
lastRow = Sheets(1).Range("BZ2") + 1
SrcData = ActiveSheet.Name & "!" & Range("A1:R" & lastRow & "C77").Address(ReferenceStyle:=xlR1C1)
StartPvt = sht.Name & "!" & sht.Range("A3").Address(ReferenceStyle:=xlR1C1)
Workbooks.Open Filename:=xlsxPath & xlsxFile
Range("A1:BY" & lastRow).Select
Sheets.Add
Set pvtCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=SrcData, Version:=6)
Set pvt = pvtCache.CreatePivotTable( _
TableDestination:=StartPvt, _
TableName:="PivotTable1", DefaultVersion:=6)
Columns("BZ:BZ").Select
Selection.Delete Shift:=xlToLeft
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
这会产生一个错误,上面写着:
运行时错误“1004”:
'object'_Global' 的方法 'Range' 失败
调试器指向确定 SrcData 范围的行。我认为问题可能出在语法上,我在 Range 中指定了 lastRow。
非常感谢这行代码的解决方案或任何其他有用的评论。