Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba VB中设置图表数据的问题_Vba_Excel - Fatal编程技术网

Vba VB中设置图表数据的问题

Vba VB中设置图表数据的问题,vba,excel,Vba,Excel,我正在努力处理宏,试图让图表显示活动范围。首先,我有一个重复的IF语句,它基本上决定了根据单元格的值选择哪些单元格(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

我正在努力处理宏,试图让图表显示活动范围。首先,我有一个重复的IF语句,它基本上决定了根据单元格的值选择哪些单元格(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
但是,我收到了错误消息“运行时错误”424:需要对象”。我相信这是因为一旦图表6被改变,所选范围就会被取消?为了解决这个问题,我尝试将范围选择存储到CHARTDATA中,但显然这也不起作用

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

欢迎提出任何想法,如果这是一个重复的、非常基本的问题(我对VBA完全陌生),我深表歉意。

Option Explicit
将wB设置为工作簿
将wS设置为工作表
双精度aB
将图表数据作为范围
模糊查斯图
设置wB=ActiveWorkbook
设置wS=wB.Sheets(“参数”)
与wS
aB=0个单元格(57,19)。数值
如果((aB<2)和(aB>=1)),则设置CHARTDATA=.Range(“g77:j90”)
如果((aB<3)和(aB>=2)),则设置CHARTDATA=.Range(“g77:j95”)
如果((aB<4)和(aB>=3)),则设置CHARTDATA=.Range(“g77:j100”)
以“wS”结尾
如果没有图表,那么数据什么都不是
设置Ch=wS.ChartOjbects(“图6”).Chart
Ch.SetSourceData源:=图表数据,绘图者:=xlColumns
其他的
MsgBox“未定义图表数据,未满足aB上的测试要求。”,vbInformation+vbOKOnly
如果结束
选项显式
将wB设置为工作簿
将wS设置为工作表
双精度aB
将图表数据作为范围
模糊查斯图
设置wB=ActiveWorkbook
设置wS=wB.Sheets(“参数”)
与wS
aB=0个单元格(57,19)。数值
如果((aB<2)和(aB>=1)),则设置CHARTDATA=.Range(“g77:j90”)
如果((aB<3)和(aB>=2)),则设置CHARTDATA=.Range(“g77:j95”)
如果((aB<4)和(aB>=3)),则设置CHARTDATA=.Range(“g77:j100”)
以“wS”结尾
如果没有图表,那么数据什么都不是
设置Ch=wS.ChartOjbects(“图6”).Chart
Ch.SetSourceData源:=图表数据,绘图者:=xlColumns
其他的
MsgBox“未定义图表数据,未满足aB上的测试要求。”,vbInformation+vbOKOnly
如果结束

您可以尝试使用
选择案例
,通过使用
工作表函数.Roundup
稍微“作弊”

使用
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

您可以使用
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

非常感谢,这是实质上更干净,更容易理解。然而,我现在发现“运行时错误9下标超出范围”,知道为什么吗?@collydug:在哪一行?如果在
设置wS=wB.Sheets(“参数”)
上,请确保在Active工作簿中有一个名为“参数”的工作表。如果它位于
wB.Charts.Item(“图表6”)…
,请确保您有一个名为图表6的图表,它位于wB.Charts.Item(“图表6”)上。当我将鼠标悬停在此行的CHARTDATA上时,它显示“CHARTDATA=nothing”。此电子表格最初是用法语制作的,在我的Microsoft Excel对象下,它将表格列为“Feuil1(参数)等”。这可能是问题的一部分吗?]@collydug:我很确定最初的语言不会成为问题。您的工作簿中是否有名为
图6
的图表?我添加了一个测试,让您知道该单元上的测试是否满足要求,因此CHARDATA将为空。它处于活动状态:0非常感谢。我将在一分钟内发布另一个关于这个的问题,但是现在这个问题已经完全解决了。谢谢。非常感谢,这是非常干净,更容易理解。然而,我现在发现“运行时错误9下标超出范围”,知道为什么吗?@collydug:在哪一行?如果在
设置wS=wB.Sheets(“参数”)
上,请确保在Active工作簿中有一个名为“参数”的工作表。如果它位于
wB.Charts.Item(“图表6”)…
,请确保您有一个名为图表6的图表,它位于wB.Charts.Item(“图表6”)上。当我将鼠标悬停在此行的CHARTDATA上时,它显示“CHARTDATA=nothing”。此电子表格最初是用法语制作的,在我的Microsoft Excel对象下,它将表格列为“Feuil1(参数)等”。这可能是问题的一部分吗?]@collydug:我很确定最初的语言不会成为问题。您的工作簿中是否有名为
图6
的图表?我添加了一个测试,让您知道该单元上的测试是否满足要求,因此CHARDATA将为空。它处于活动状态:0非常感谢。我将在一分钟内发布另一个关于这个的问题,但是现在这个问题已经完全解决了。谢谢。这很好,因为我可能需要在后面添加第二个数据系列。非常感谢。这是非常好的,因为我以后可能需要包括第二个数据系列。非常感谢你。
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