Excel vbadynamicreplace数据透视表的R(数字)C(数字)

我很新vba。 因此,我一直在使用“录制macros…”function来启动我的脚本。 从这一点,我砍掉了。

我logging了一个macros来创build一个基于数据的数据透视表,这个数据表会随着时间的推移而dynamic变化(即每天或每个月)。

“My_Data”表包含故障单信息,例如故障单closures的年份和月份。

以下是录制的脚本的样子(尽pipe我通过添加简单的行来创build名为“Closed”的透视图的目标工作表,但入侵了一下):

Sub CreateClosedPivot() Sheets("My_Data").Select Sheets.Add.Name = "Closed" ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "My_Data!R1C1:R210C23", Version:=xlPivotTableVersion15). _ CreatePivotTable TableDestination:="Closed!R1C1", TableName:="PivotTable8" _ , DefaultVersion:=xlPivotTableVersion15 Sheets("Closed").Select Cells(1, 1).Select With ActiveSheet.PivotTables("PivotTable8").PivotFields("Year Closed") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("PivotTable8").AddDataField ActiveSheet.PivotTables( _ "PivotTable8").PivotFields("Month Closed"), "Count of Month Closed", xlCount With ActiveSheet.PivotTables("PivotTable8").PivotFields("Month Closed") .Orientation = xlRowField .Position = 2 End With End Sub 

如上所述,My_Data表将会改变。 这意味着包含“My_Data!R1C1:R210C23”的静态logging行在下个月运行该macros时将不正确。 具体来说,这个问题在该行代码中被隔离为“R210”。 行号会改变。 其他数字是静态的(例如C23)。

我也知道如何获得My_Data最后一行的数量:

 Dim sht As Worksheet Dim LastRow As Long Set sht = ThisWorkbook.Worksheets("My_Data") LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row MsgBox "LastRow is " & LastRow, vbInformation 

什么是更好的将是能够以“LastRow”取代静态“R210”。

如果这是可能的,有人可以提供语法来启用这个替代?

"My_Data!R1C1:R210C23"是一个string。 你总是可以像这样replace一部分string:

 "My_Data!R1C1:R" & LastRow & "C23" 

确保string包含用variablesreplace某些内容时所需的所有内容。