问题在VB中设置图表数据

我正在努力与我的macros,我试图让图表显示一个活跃的范围。 首先,我有一个重复的IF语句,基本上决定哪个单元格将根据单元格的值来select(Set ab = Cells(57,19))。 看下面的例子…

Dim wb As Workbook Dim ws As Worksheet Set wb = ActiveWorkbook Set ws = Sheets(“Parameters”) wb.Activate ws.Select Dim ab As Range Set ab = Cells(57, 19) Dim rng As Range If ((ab < 2) And (ab >= 1)) Then Range(“g77:j90”).Select End If If ((ab < 3) And (ab >= 2)) Then Range(“g77:j95”).Select End If If ((ab < 4) And (ab >= 3)) Then Range(“g77:j100”).Select End If 

在此之后我想要“图表6”显示这个select作为源数据。

 Dim CHARTDATA As Range Set CHARTDATA = selection Chart6.SetSourceData Source:=CHARTDATA, PlotBy:=xlColumns 

但是,我收到错误消息“运行时错误”424“:所需的对象”。 我相信这是由于一旦图6被改变,选定的范围就被取消了。 为了解决这个问题,我尝试将范围select存储到CHARTDATA,但显然这并没有奏效。

如何将通过IF语句select的数据设置为显示在图6中?

任何和所有的想法是受欢迎的,并且如果这是一个重复的和非常基本的问题(我对VBA是全新的)表示歉意。

 Option Explicit Dim wB As Workbook Dim wS As Worksheet Dim aB As Double Dim CHARTDATA As Range Dim Ch as Chart Set wB = ActiveWorkbook Set wS = wB.Sheets("Parameters") With wS aB = .Cells(57, 19).value If ((aB < 2) And (aB >= 1)) Then Set CHARTDATA = .Range("g77:j90") If ((aB < 3) And (aB >= 2)) Then Set CHARTDATA = .Range("g77:j95") If ((aB < 4) And (aB >= 3)) Then Set CHARTDATA = .Range("g77:j100") End With 'wS If Not CHARTDATA Is Nothing Then Set Ch = wS.ChartOjbects("Chart 6").Chart Ch.SetSourceData Source:=CHARTDATA, PlotBy:=xlColumns Else MsgBox "CHARTDATA is not defined, your tests on aB are not met.", vbInformation + vbOKOnly End If 

您可以使用WorksheetFunction.Roundup尝试使用Select Case与“作弊”一点。

使用Select Case可以让您在未来添加更多的场景。

 Option Explicit Sub ChartRange() Dim wB As Workbook Dim wS As Worksheet Dim aB As Long Dim CHARTDATA As Range Set wB = ActiveWorkbook Set wS = wB.Worksheets("Parameters") With wS aB = Application.WorksheetFunction.RoundDown(.Cells(57, 19).Value, 0) ' use the round down to round down to the nearest integer Select Case aB Case 1 ' (from 1 to 1.99999) Set CHARTDATA = .Range("G77:G90") Case 2 ' (from 2 to 2.99999) Set CHARTDATA = .Range("G77:G95") Case 3 ' (from 3 to 3.99999) Set CHARTDATA = .Range("G77:G100") End Select End With wB.Charts.Item("Chart 6").SetSourceData Source:=CHARTDATA, PlotBy:=xlColumns End Sub