Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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将分散的数据添加到饼图中_Vba_Excel_Charts - Fatal编程技术网

通过VBA将分散的数据添加到饼图中

通过VBA将分散的数据添加到饼图中,vba,excel,charts,Vba,Excel,Charts,我正在为我的论文做一个项目,当我试图用VBA在excel中绘制饼图时,我遇到了一个错误 我处理的数据的性质使我无法使用直线范围,因为数据分散在工作表上 obseg(0) = "=List3!" obseg(1) = "=List3!" Range("K6").Select Do Until completed ActiveCell.Offset(1, 0).Select 'Application.Wait (Now() + TimeValue("00:00:01")) I

我正在为我的论文做一个项目,当我试图用VBA在excel中绘制饼图时,我遇到了一个错误

我处理的数据的性质使我无法使用直线范围,因为数据分散在工作表上

obseg(0) = "=List3!"
obseg(1) = "=List3!"
Range("K6").Select
Do Until completed
    ActiveCell.Offset(1, 0).Select
    'Application.Wait (Now() + TimeValue("00:00:01"))
    If (ActiveCell.Value = "Čas:") Then
        obseg(0) = obseg(0) & CStr(ActiveCell.Offset(-1, 0).Address) & ";List3!"
        obseg(1) = obseg(1) & CStr(ActiveCell.Offset(-2, 1).Address) & ";List3!"
    End If
    If (IsEmpty(ActiveCell.Value)) Then
        obseg(0) = obseg(0) & CStr(ActiveCell.Offset(-1, 0).Address)
        If (IsEmpty(ActiveCell.Offset(-2, 1).Value)) Then
            ActiveCell.Offset(-2, 1).Value = "neznana"
            obseg(1) = obseg(1) & CStr(ActiveCell.Offset(-2, 1).Address)
        Else
            obseg(1) = obseg(1) & CStr(ActiveCell.Offset(-2, 1).Address)
        End If
        Exit Do
    End If
Loop
这是收集此数据并将字符串写入obseg(0)和obseg(1)的代码。 特定运行的结果给出obseg(0)的此结果:

这与我手动选择相同数据并运行宏记录器时得到的字符串完全相同。那代码就行了,但这行不通。按代码创建新图表时会出现此问题

Charts.Add
ActiveChart.ChartType = xlPie
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).values = obseg(0)
ActiveChart.SeriesCollection(1).XValues = obseg(1)
此操作返回并出错,在第三行停止:

Runtime error '1004'
Application-defined or object-defined error
我们将非常感谢您解释为什么会发生这种情况或提供任何帮助


谢谢

不要将字符串用于
Series.Values
Series.XValues
。改用范围的
联合

简单的例子:

Sub Makro1()

    Set oXValues = Worksheets("List3").Range("$B$2:$B$4")
    Set oXValues = Union(oXValues, Worksheets("List3").Range("$B$8:$B$10"))
    Set oXValues = Union(oXValues, Worksheets("List3").Range("$B$13:$B$14"))

    Set oValues = Worksheets("List3").Range("$C$2:$C$4")
    Set oValues = Union(oValues, Worksheets("List3").Range("$C$8:$C$10"))
    Set oValues = Union(oValues, Worksheets("List3").Range("$C$13:$C$14"))

    Set oChart = Charts.Add
    oChart.ChartType = xlPie
    oChart.SeriesCollection.NewSeries
    oChart.SeriesCollection(1).Name = "=""test"""
    oChart.SeriesCollection(1).Values = oValues
    oChart.SeriesCollection(1).XValues = oXValues

End Sub

我通过以一种完全不同的方式构造obseg字符串来实现它。事实证明,饼图只接受数字数据作为第一个系列,任何类型作为第二个系列

对于那些感兴趣的人,这里是从电子表格收集数据的新代码:

obseg(0) = "={"
obseg(1) = "={"
Range("K6").Select
Do Until completed
    ActiveCell.Offset(1, 0).Select
    'Application.Wait (Now() + TimeValue("00:00:01"))
    If (ActiveCell.Value = "Čas:") Then
        obseg(0) = obseg(0) & CStr(ActiveCell.Offset(-1, 0).Value) & "; "
        obseg(1) = obseg(1) & Chr(34) & CStr(ActiveCell.Offset(-2, 1).Value) & Chr(34) & "; "
    End If
    If (IsEmpty(ActiveCell.Value)) Then
        obseg(0) = obseg(0) & CStr(ActiveCell.Offset(-1, 0).Value) & "}"
        If (IsEmpty(ActiveCell.Offset(-2, 1).Value)) Then
            ActiveCell.Offset(-2, 1).Value = "neznana"
            obseg(1) = obseg(1) & Chr(34) & CStr(ActiveCell.Offset(-2, 1).Value) & Chr(34) & "}"
        Else
            obseg(1) = obseg(1) & Chr(34) & CStr(ActiveCell.Offset(-2, 1).Value) & Chr(34) & "}"
        End If
        Exit Do
    End If
Loop
特定运行的结果用以下内容填充阵列obseg(1):

以及obseg(0)与:

饼图接受这一点


Fort Ash

更正:显然宏记录器生成的代码也不起作用。有没有办法让饼图接受我正在接收的数据字符串?饼图只有一个系列,因此需要先清除任何现有系列。饼图通常也不是图表类型的最佳选择。但是,图表完全独立于工作表上的数据。如果工作表上的数据发生更改,则图表在再次运行宏之前不会更改。
obseg(0) = "={"
obseg(1) = "={"
Range("K6").Select
Do Until completed
    ActiveCell.Offset(1, 0).Select
    'Application.Wait (Now() + TimeValue("00:00:01"))
    If (ActiveCell.Value = "Čas:") Then
        obseg(0) = obseg(0) & CStr(ActiveCell.Offset(-1, 0).Value) & "; "
        obseg(1) = obseg(1) & Chr(34) & CStr(ActiveCell.Offset(-2, 1).Value) & Chr(34) & "; "
    End If
    If (IsEmpty(ActiveCell.Value)) Then
        obseg(0) = obseg(0) & CStr(ActiveCell.Offset(-1, 0).Value) & "}"
        If (IsEmpty(ActiveCell.Offset(-2, 1).Value)) Then
            ActiveCell.Offset(-2, 1).Value = "neznana"
            obseg(1) = obseg(1) & Chr(34) & CStr(ActiveCell.Offset(-2, 1).Value) & Chr(34) & "}"
        Else
            obseg(1) = obseg(1) & Chr(34) & CStr(ActiveCell.Offset(-2, 1).Value) & Chr(34) & "}"
        End If
        Exit Do
    End If
Loop
={"1"; "5"; "12"; "neznana"}
={265; 76; 857; 8444}