问题描述
目标: 创建图表并将X轴标签设置为等于该工作表中的范围以及范围的最后一行(值,而不是公式)。完整的宏将遍历wb中的每个工作表,并使用该工作表中的数据在每个工作表中创建新的图形。
完整代码:
Sub test()
Dim Sht As Worksheet
'Create Graph Data: Make Local Mgmt Details Short names
'Create graph
'Size Graph
Dim rng As Range,rngChart As Range,XLabelrng As Range
Dim Lastrowdata As Long
Dim cht As Object
For Each Sht In Worksheets
'Local Management Details Mapping (graph data)
With Sht
.Range("AA8") = "=IFERROR(IF(VLOOKUP(""FX Allocation & Hedging"",B:C,2,FALSE)=0,"""",""FX""),"""")"
.Range("AB8") = "=IFERROR(IF(VLOOKUP(""FX Allocation & Hedging"",VLOOKUP(""FX Allocation & Hedging"",FALSE)),"""")"
.Range("AA9:AA18") = "=IF(E9=""Yield Curve"",""YC"",IF(E9=""Asset Allocation"",""A. Alloc"",IF(E9=""Security Selection"",""Sec Sel"",IF(E9=""Leverage"",""Lev"",IF(E9=""Intra-Day"",""Intra"",IF(E9=""Pricing Differences"",""Pric"",IF(E9=""Exclusions"",""Exc"",IF(E9=""Interest Rate Derivative Basis"",""IRD"",IF(E9=""Implied Volatility"",""Vol"",IF(E9=""Mortgage"",""Mtg"",IF(E9=""Residual"",""Res"",IF(E9=""Others"",""Others"",""Others""))))))))))))"
.Range("AB9:AB18") = "=IF(I9="""",I9)"
'.Range("AA8:AB18").Font.Color = vbWhite
End With
'Your data range for the chart and x-axis labels
Lastrowdata = [AB:AB].Find("*",xlValues,xlByRows,xlPrevIoUs).Row
Set rng = Sht.Range("AB8:AB" & Lastrowdata)
'Chart Location
Set rngChart = Range("K9:W18")
'Create a chart (style,XlChartType,Left,Top,Width,Height,NewLayout)
Set cht = Sht.Shapes.AddChart2(203,xlColumnClustered,1,False)
'Chart setup
With cht.Chart
.SetSourceData Source:=rng
.SeriesCollection(1).XValues = ("='" & Sht & "'!$AA$8:$AA" & Lastrowdata)
.HasTitle = False
.HasLegend = False
.Axes(xlValue).MajorUnit = 50
End With
'Chart location
With cht
.Left = rngChart.Left
.Top = rngChart.Top
.Width = rngChart.Width
.Height = rngChart.Height
End With
Next Sht
End Sub
问题:
我知道这里的语法有误,但是应该可以让您清楚地了解我要查找的内容:.SeriesCollection(1).XValues = ("='" & Sht & "'!$AA$8:$AA" & Lastrowdata)
在单张纸上进行测试时,没有遍历它们,我有类似.SeriesCollection(1).XValues = "='BMA'!$AA$8:$AA17"
的代码对其进行测试,并且一切正常,但是我需要保持动态。
解决方法
只缺少一件事:
.SeriesCollection(1).XValues = "='" & Sht.Name & "'!$AA$8:$AA" & Lastrowdata