代码之家  ›  专栏  ›  技术社区  ›  TyRa97

VBA-使用变量更改X值

  •  1
  • TyRa97  · 技术社区  · 7 年前

    我是编程领域的新手,正在开始学习VBA,以便在Excel中为财务场景建模。 现在我有一个问题,关于改变图表的XValues,以改变给定数据集的日期。

    我使用存储序列的第一行和最后一行编号的变量,我想使用这些变量给VBA一个不同的范围,以便根据我如何定义变量来选择x值。 变量定义为整数。

    我的代码:

    Sheets("Result").ChartObjects("Chart 2").Activate
    ActiveChart.FullSeriesCollection(1).XValues = ActiveWorkbook.Sheets("Data_Portfolio").Range(Cells(RangeStart, 1), Cells(RangeStop, 1))
    

    如果您能向我解释第二行有什么问题,以及我如何解决“应用程序定义或对象定义错误”,那将非常感谢。

    我提前感谢大家,

    刻痕

    1 回复  |  直到 4 年前
        1
  •  1
  •   QHarr    7 年前

    1) 完全合格 Cells 使用工作表名称

     ActiveChart.FullSeriesCollection(1).XValues = ActiveWorkbook.Sheets("Data_Portfolio").Range(ActiveWorkbook.Sheets("Data_Portfolio").Cells(RangeStart, 1), ActiveWorkbook.Sheets("Data_Portfolio").Cells(RangeStop, 1)) 
    

    2) 还应确保有一个系列(1)要添加到,对于某些版本,最好使用 SeriesCollection 而不是 FullSeriesCollection

    3) 使用Long而不是Integer以避免潜在的溢出。

    以下示例:

    Option Explicit
    
    Public Sub test()
    
        Dim RangeStart As Long
        Dim RangeStop As Long
    
        RangeStart = 1
        RangeStop = 5
        Dim ws As Worksheet
        Set ws = ActiveWorkbook.Worksheets("Data_Portfolio")
    
        Worksheets("Result").ChartObjects("Chart 2").Activate '<== Is this ActiveWorkbook or ThisWorkbook?
        ActiveChart.SeriesCollection.NewSeries '<=  added for demo only to ensure present
        ActiveChart.SeriesCollection(1).XValues = ws.Range(ws.Cells(RangeStart, 1), ws.Cells(RangeStop, 1)) '< x
        ActiveChart.SeriesCollection(1).Values = ws.Range(ws.Cells(RangeStart, 1), ws.Cells(RangeStop, 1)) ' < y copied for test purposes only
    End Sub