VBA程序子错误; 试图设置条件循环

此程序旨在用于从另一个工作表上的数据透视表中复制数据(每个数据集的行数不同)。 每组粘贴的数据都用来创build自己的瀑布图,为此我已经在不同的图纸上制作了模板。

我有这个代码有几个问题。 1)出于某种原因,它不再运行(我重构了一个macros的代码),并给我错误“编译错误:子或函数没有定义” – 我试着做一个新的模块和一个新的macros,但没有avail 2)另外,我想根据数据集的大小更改图表的范围。 这是我目前硬编码的:

Selection.Formula = "=SERIES(,Sheet5!R8C1:R17C1,Sheet5!R8C4:R17C4,1)" 
  • 所以,Sheet5!R8C1:R17C1需要成为SheetN!开始:结束

完整代码如下:

 Sub WF_New_Sheet() Dim copyFrom As Range Dim wS As Worksheet 'use as current worksheet Dim cht As Chart 'Paste and format data Set wS = Sheets("Pivot 1") copyFrom = wSRange("C82:D90") Set wS = Sheets.Add(After:=Worksheets.Count) wS.Range("A9").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Selection.Columns.AutoFit Application.CutCopyMode = False Range("A9", Range("B" & Rows.Count).End(xlUp).Address).sort Key1:=[b9], _ Order1:=xlAscending, Header:=xlNo 'sorts in 2 lines Range("A8").Value = "Total" Range("B8").Value = "=SUM(R[1]C:R[9]C)" Dim rNum As Integer: rNum = Range("A9", Range("B" & Rows.Count).End(xlUp).Address).Rows.Count 'Paste data template and chart copyFrom = Sheets("Sheet4").Range("D2:G15") 'sheet 4 is hardcoded and contains templates wS.Range("D6").Resize(copyFrom.Rows.Count).Value = copyFrom.Value Sheets("Sheet4").ChartObjects("Chart 1").Activate Application.CutCopyMode = False ActiveChart.ChartArea.Copy wS.Range("I7").Select ActiveSheet.Paste ActiveSheet.ChartObjects("Chart 1").Activate 'Set appropriate ranges for chart data; format data for display ActiveChart.SeriesCollection(2).Select Selection.Formula = "=SERIES(,Sheet5!R8C1:R17C1,Sheet5!R8C5:R17C5,2)" 'How to make this dynamic? ActiveChart.SeriesCollection(1).Select Selection.Formula = "=SERIES(,Sheet5!R8C1:R17C1,Sheet5!R8C4:R17C4,1)" 'How to make this dynamic? Range("B8").Value = "=SUM(R[1]C:R[9]C)*-1" With Range("b9", "b17") .Value = Evaluate(.Address & "*" & -1) End With End Sub 

*编辑代码固定为包括子和结束子

找出如何调整图表大小。 添加了这些行:

  Dim rowStart As Integer: rowStart = InputBox("Please enter starting row of your dataset.") Dim rowEnd As Integer: rowEnd = InputBox("Please enter ending row of your dataset.") Set copyFrom = Sheets("Pivot 1").Range(Sheets("Pivot 1").Cells(rowStart, colOne), Sheets("Pivot 1").Cells(rowEnd, colOne)) Set wS = Sheets.Add wS.Move After:=Sheets(ActiveWorkbook.Sheets.Count) wS.Range("A9").Resize(copyFrom.Rows.Count, copyFrom.Columns.Count).Value = copyFrom.Value Set copyFrom = Sheets("Pivot 1").Range(Sheets("Pivot 1").Cells(rowStart, colTwo), Sheets("Pivot 1").Cells(rowEnd, colTwo)) wS.Range("B9").Resize(copyFrom.Rows.Count, copyFrom.Columns.Count).Value = copyFrom.Value