Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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/0/vba/15.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
Excel 在VBA中设置图表数据范围_Excel_Vba - Fatal编程技术网

Excel 在VBA中设置图表数据范围

Excel 在VBA中设置图表数据范围,excel,vba,Excel,Vba,我正在帮助修改管理团队用于业务分析的Excel表格。我正在制作一个仪表板页面,以易于理解的方式显示数据。他们将数据添加到数据页面,点击一个按钮,然后刷新值 我的问题是让图表自动更新其中的范围。该图表有两个数据系列,投标提交和中标,按周绘制。随着一年中几周的过去,图表中会有更多的数据 我的代码如下所示 Sub Dashboard_Tool() Dim Sh1 As Worksheet Dim sh2 As Worksheet Dim Myvalue As String Dim lastcell

我正在帮助修改管理团队用于业务分析的Excel表格。我正在制作一个仪表板页面,以易于理解的方式显示数据。他们将数据添加到数据页面,点击一个按钮,然后刷新值

我的问题是让图表自动更新其中的范围。该图表有两个数据系列,投标提交和中标,按周绘制。随着一年中几周的过去,图表中会有更多的数据

我的代码如下所示

Sub Dashboard_Tool()

Dim Sh1 As Worksheet
Dim sh2 As Worksheet
Dim Myvalue As String
Dim lastcell As Range
Dim B As Byte
Dim P As Byte

'this is to get the bid info
Set Sh1 = Worksheets("New Dashboard")
Set sh2 = Worksheets("MI Dashboard")

For B = 1 To 12
    Myvalue = sh2.Cells(9, B + 9)
    Sh1.Cells(26, 3).Value = Myvalue
    Sh1.Cells(26, 2).Value = "This Month (" & sh2.Cells(8, B + 9) & ")"
    If sh2.Cells(9, B + 10).Value = "" Then Exit For
Next B

Set lastcell = sh2.Cells(9, B + 9)
Debug.Print lastcell.Value
ActiveSheet.ChartObjects("Bid Chart").Activate
Application.CutCopyMode = False
ActiveChart.FullSeriesCollection(1).Values = "='MI Dashboard'!$K$9:" & Cells(lastcell.Row, lastcell.Column)
这是我引用的最后一个石灰,也是问题所在。无论我用哪种方式写表达式,都会得到相同的错误

运行时错误“1004”:
应用程序定义或对象定义错误


我试着用多种方法重写这行代码。此字段的变量是列。该行始终是数字9。

最后一行需要为
.Value
分配一个范围地址字符串,但可能会发生错误,因为您正在生成的字符串不是有效地址

"='MI Dashboard'!$K$9:" & Cells(lastcell.Row, lastcell.Column)
将第一部分与lastcell.row,column(顺便说一句,当前活动工作表的)单元格的连接起来

你想要的是更接近这一点的东西:

"='MI Dashboard'!$K$9:" & sh2.Cells(lastcell.Row, lastcell.Column).Address
我的建议是为地址创建一个字符串,您可以在分配给
.Value
之前检查它,这样您就知道它是正确的

Dim seriesAddress As String
seriesAddress = "='MI Dashboard'!$K$9:" & sh2.Cells(lastcell.Row, lastcell.Column).Address
Debug.Print seriesAddress
ActiveChart.FullSeriesCollection(1).Values = seriesAddress

为什么不将数据输入到一个表中,并将图表建立在表的基础上呢?Excel足够聪明,可以自动扩展输入到表中的内容,我们可以使用纯内置功能来实现这一点,而不是编写代码。数据是从已经存在的表中获取的,该表的行中包含的数据不仅仅是我需要的数据。我试着在一个表中创建一个表,但excel不允许,否则我会这么做。但是感谢您的建议看起来您有了一个解决方案,但还有两个解决方案:1)添加一个新的布尔列,用于判断是否需要数据,并制作一个透视图,在布尔列上进行过滤-2)使用power query进行过滤,并根据power query生成的新表制作图表。这正是我所需要的,谢谢!这是地址函数!我对vba还不熟悉,完全忘记了它的存在,再多的谷歌搜索如何使它与单元格的实际范围相等,也不会给我.address函数。我猜这是因为我在搜索中没有使用“地址”这个词。谢谢你的回答和时间