【发布时间】:2015-01-27 18:38:24
【问题描述】:
我有一个数据表,其中图表的第 15 行有月份,“B17:B25”的“B”列中有各种公司名称。示例表如下图所示
现在我编写了一个代码,它将捕获这些值并输出一个堆积柱形图,如下所示:
这是我写的代码:
Sub getchart()
y = Format(Now, "ww")
Dim ws As Worksheet
Dim aCell As Range, Rng As Range, bCell As Range, sRng As Range, fRng As Range
Dim col As Long, lRow As Long, srow As Long
Dim colName As String
Dim wsTemp As Worksheet
Dim oChrt As ChartObject
Dim sheetname As String
'~~> Change this to the relevant sheet
Set ws = ThisWorkbook.Sheets("Calculation")
With ws
Set aCell = .Range("D16:BC16").Find(What:=y, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
Set bCell = .Range("B:B").Find(What:="Total no of Consultants", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
'~~> If Found
If Not aCell Is Nothing Then
col = aCell.Column
colName = Split(.Cells(, col).Address, "$")(1)
Else
MsgBox "Nov Not Found"
End If
If Not bCell Is Nothing Then
srow = bCell.Row
x = srow - 1
Else
MsgBox "Nov Not Found"
End If
Set sRng = .Range(colName & "17:" & colName & x)
Debug.Print sRng.Address
Set fRng = .Range("B" & "17:" & "B" & x)
Debug.Print fRng.Address
End With
'~~> Set the sheet where you have the charts data
ActiveWorkbook.Worksheets("Calculation").Activate
'~~> This is your charts range
Set Rng = Range("D17:G25")
'~~> Delete the temp sheeet if it is there
Application.DisplayAlerts = False
On Error Resume Next
ThisWorkbook.Sheets("TempOutput").Delete
On Error GoTo 0
Application.DisplayAlerts = True
'~~> Add a new temp sheet
Set wsTemp = ThisWorkbook.Sheets.Add
With wsTemp
'~~> Give it a name so that we can delete it as shown above
'~~> This is just a precaution in case `wsTemp.Delete` fails below
.Name = "TempOutput"
'~~~> Add the chart
Set oChrt = .ChartObjects.Add _
(Left:=5, Width:=650, Top:=20, Height:=350)
'~~> Set the chart's source data and type
'~~> Change as applicable
With oChrt.Chart
.SetSourceData Source:=Rng
.ChartType = xlColumnStacked
.HasTitle = True
'.Legend.LegendEntries (fRng)
.HasLegend = True
.ChartTitle.Text = "Total # Consultants and Spread"
' .SeriesCollection(1).DataLabels.ShowValues = True
For intSeries = 1 To .SeriesCollection.Count
.SeriesCollection(intSeries).Name = fRng.Cells(intSeries, 1)
Next
End With
End With
End Sub
现在我想要的是在堆积柱形图的列中显示每个条形的数据值。那么如何编写一个 vba 代码来显示数据值。
请帮帮我
【问题讨论】: