Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在VBA中使用XLDOWN_Excel_Vba - Fatal编程技术网

Excel 在VBA中使用XLDOWN

Excel 在VBA中使用XLDOWN,excel,vba,Excel,Vba,我有一个宏,可以生成透视表并将其粘贴到图纸中。我想对该表中的数据进行一些计算,然后根据这些计算创建一个图表。目前,我有下面的VBA,它工作得很好,但透视表开始有不同数量的行,而不是总是48行。我希望能够动态生成图表,而不管数据透视表最终有多少行。数据透视表数据总是从A64开始(我不需要A63中的标题),它的底部有一个我不想要的总计,所以我想我必须使用xldown-1或类似的东西。工作表上有多个表,但它们之间有空格 我想在这种情况下我需要使用End-XLDOWN,但我不确定具体怎么做。有人能帮忙吗

我有一个宏,可以生成透视表并将其粘贴到图纸中。我想对该表中的数据进行一些计算,然后根据这些计算创建一个图表。目前,我有下面的VBA,它工作得很好,但透视表开始有不同数量的行,而不是总是48行。我希望能够动态生成图表,而不管数据透视表最终有多少行。数据透视表数据总是从A64开始(我不需要A63中的标题),它的底部有一个我不想要的总计,所以我想我必须使用xldown-1或类似的东西。工作表上有多个表,但它们之间有空格

我想在这种情况下我需要使用End-XLDOWN,但我不确定具体怎么做。有人能帮忙吗

Range("Pivots!$E64).Formula = "=((C64/B64)/DATA!$Y$5)"
 Range("Pivots!$E65).Formula = "=((C65/B65)/DATA!$Y$5)"

 ... and so on down to 

 Range("Pivots!$E111).Formula = "=((C111/B111)/DATA!$Y$5)"

 ActiveSheet.Shapes.AddChart.Select
 ActiveChart.ChartType = xlLine
 ActiveChart.SetSourceData Source:=Range("Pivots!$E$64:$E$111")
 ActiveChart.SeriesCollection(1).XValues = "=Pivots!$A$64:$A$111"

 ActiveSheet.ChartObjects("Chart 1").Activate
 ActiveChart.ChartArea.Select
 ActiveChart.Parent.Cut
 Sheets("Front Sheet").Select

 Range("B23").Select
 ActiveSheet.Paste 

可以使用以下方式存储数据透视表的行结束:

Dim LRow as Long
LRow = Sheets("Pivots").Range("B3").End(XLDown).Row -1
然后可以使用LRow变量表示透视表的最后一行。您需要使用循环来设置公式,如Dim LLoop Long

For LLoop = 64 To LRow
    Sheets("Pivots").Range("$E" & LLoop).Formula = "=((C" & LLoop & "/B" & LLoop & ")/DATA!$Y$5)"
Next LLoop
最后,您可以使用相同的LRow变量设置透视图的源数据和xvalue

ActiveChart.SetSourceData Source:=Sheets("Pivots").Range("$E$64:$E$" & LRow)
ActiveChart.SeriesCollection(1).XValues = "=Pivots!$A$64:$A$" & LRow

您不必单独输出每个公式,只需使用

正如@所解释的,您可以使用pivot数据的最后一行分配一个变量,然后在代码中使用它

还值得一提的是,在VBA中处理对象时,如果您利用


请参阅这篇关于表格或电子表格的文章。谢谢,但是我在这一行得到一个错误:ActiveChart.SetSourceData:=工作表(“Pivots”).Range($E$64:$E$”&LRow),它表示运行时错误“91”:对象变量或未设置块变量。@tomdemaine请尝试使用
ActiveChart.SetSourceData:=范围(“Pivots!$E$64:$E$”&LRow)
同样的问题我很抱歉,你知道吗,我错过了ActiveSheet.Shapes.AddChart.Select my bad。再次感谢你的帮助。
With wsPivots
    lastPivotRow = .Range("E64").End(xlDown).Row - 1
    .Range("E64").Formula = "=((C64/B64)/DATA!$Y$5)"
    .Range("E64:E" & lastPivotRow).FillDown
End With
With ActiveChart
    .ChartType = xlLine
    .SetSourceData Source:=Range("Pivots!$E$64:$E$" & lastPivotRow)
    .SeriesCollection(1).XValues = "=Pivots!$A$64:$A$" & lastPivotRow
End With