问题描述
我正在研究 Sheets(“Exhibit”)中的 Stock OHLC 图表,并从 Sheets(“75Min”)中选择数据。但是我成功地选择了合适的数据范围,但无法在第 Nu 15 行添加。SetSourcedata,你能帮我解决这个问题吗 代码如下。
Sub Edit75MinChartToOHLCCandlestickChart()
Dim OHLCChart As ChartObject
Dim LastRow As Integer
Dim RngSt As Integer
Sheets("75Min").Select
Range("A1").Select
Range("A1").End(xlDown).Select
LastRow = ActiveCell.Row
RngSt = LastRow - 59
RngEnd = LastRow + 15
Set OHLCChart = ThisWorkbook.Worksheets("Exhibit").ChartObjects(1)
With OHLCChart.Chart 'Worksheets("Exhibit").ChartObjects("Chart 2").Chart
.SetSourceData ThisWorkbook.Worksheets("75Min").Range(RngSt,RngEnd)
.ChartType = xlStockOHLC
.HasTitle = True
.ChartTitle.Text = "75Min Candlestick chart"
.Axes(xlValue,xlPrimary).HasTitle = False
.Axes(xlValue,xlPrimary).AxisTitle.Characters.Text = "Price"
.PlotArea.Format.Fill.ForeColor.RGB = RGB(242,242,242)
.ChartArea.Format.Line.Visible = msoFalse
.Parent.Name = "OHLC Chart"
End With
End Sub
谢谢
解决方法
最好避免 Select
和 Activate
。您的范围不是有效范围。您说的是 Range(#,#)
,这是无效的,我怀疑您是否试图获取整行。假设您只想要第一列,这将起作用。如果需要标签,可以从 1 展开列。
Sub Edit75MinChartToOHLCCandlestickChart()
Dim OHLCChart As ChartObject
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("75Min")
Set ws2 = ThisWorkbook.Worksheets("Exhibit")
Dim MyRng As Range
Dim LastRow As Long
Dim RngSt As Long
Dim RngEnd as Long
LastRow = ws1.Cells(ws1.Rows.Count,1).End(xlUp).Row
RngSt = LastRow - 59
RngEnd = LastRow + 15
Set MyRng = ws1.Range(ws1.Cells(RngSt,1),ws1.Cells(RngEnd,1))
Set OHLCChart = ws2.ChartObjects(1)
With OHLCChart.Chart 'Worksheets("Exhibit").ChartObjects("Chart 2").Chart
.SetSourceData MyRng
,
您可以包含这些行来调整 Y 轴比例:
extensionPath
但这些可能是丑陋的轴限制。我写了一个名为 Calculate Nice Axis Scales in Excel VBA 的教程,其中包含一个算法,可以稍微向外调整最小值和最大值,以使比例更易于人类阅读。