【问题标题】:VBA - Modification of SourceData (Dynamic Range) of existing STock OHLC ChartVBA - 修改现有股票 OHLC 图表的 SourceData(动态范围)
【发布时间】:2023-03-20 10:30:02
【问题描述】:

我正在处理 Sheets("Exhibit") 中的 Stock OHLC Chart,并从 Sheets("75Min") 中选择数据。但是我成功地选择了合适的数据范围,但不能在 Line 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

谢谢

【问题讨论】:

    标签: excel vba charts stock ohlc


    【解决方案1】:

    最好避免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 轴刻度限制为从范围开始到最后一行的最小和最大范围,即 RngSt 到最后一行?谢谢你
    • 您应该将此作为一个新问题提出。
    【解决方案2】:

    您可以包括这些线来调整 Y 轴刻度:

    Dim Ymin As Double, Ymax As Double
    Ymin = WorksheetFunction.Min(MyRng)
    Ymax = WorksheetFunction.Max(MyRng)
    
    With OHLCChart.Chart.Axes(xlValue)
      .MinimumScale = Ymin
      .MaximumScale = Ymax
    End With
    

    但这些可能是丑陋的轴限制。我编写了一个名为 Calculate Nice Axis Scales in Excel VBA 的教程,其中包含一个算法,可以稍微向外调整最小值和最大值,以便刻度更易于阅读。

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多