VBA - 修改现有股票 OHLC 图表的 SourceData动态范围

问题描述

我正在研究 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

谢谢

解决方法

最好避免 SelectActivate。您的范围不是有效范围。您说的是 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 的教程,其中包含一个算法,可以稍微向外调整最小值和最大值,以使比例更易于人类阅读。