我有一个Excel电子表格,其中包含通过某些VBA代码动态添加的行数据。每分钟都会添加一行新数据。电子表格关闭后,更多代码会自动删除所有这些数据。当电子表格重新打开时,数据会刷新,并再次添加到每分钟。
我想在折线图中绘制这些数据。我希望折线图每分钟更新一次,但我也希望X轴能够每分钟动态“增长”。为实现这一目标,我一直在'define name'中使用offset命令,如下所示:
Time=OFFSET(Sheet4!$A$2,0,0,COUNTA(Sheet4!$A:$A)-1)
和
Total=OFFSET(Sheet4!$K$2,0,0,COUNTA(Sheet4!$K:$K)-1)
时间在我的图表的x轴上,Total在y轴上。
在图表本身中,在“选择数据源”下,对于x(水平)轴,轴标签范围设置为:
=Sheet4!Time
在Legend Legend Entries下,系列值设置为:
=Sheet4!Total
这一切都运行良好直到关闭我的电子表格并重新打开它。该图表不再填充任何数据,并且不会每分钟更新一次。如果我进入名称管理器,“时间”现在读作:
=OFFSET(Sheet4!#REF!,0,0,COUNTA(Sheet4!$A:$A)-1)
和Total读作:
=OFFSET(Sheet4!#REF!,0,0,COUNTA(Sheet4!$K:$K)-1)
因此,参考文献已丢失。我怀疑这是因为当电子表格重新打开时,它正在寻找第一行中的值,并且不会立即找到它们(也许它是在VBA代码拉入数据之前查找它们。)
有没有人有任何建议?我正在使用Excel 2016。
答案 0 :(得分:2)
当电子表格关闭时,更多代码会自动删除所有内容 这个数据。
当您删除所有数据时,单元格引用将丢失 - 如果您引用单元格A1
,然后删除该单元格,则任何公式现在都会显示#REF!
错误。
如果清除单元格的内容而不是删除它们,则永远不会出现错误。
代码中的某处将是类似于:
的行ThisWorkbook.Worksheets("Sheet1").Cells.Delete
如果您将此行更改为:
ThisWorkbook.Worksheets("Sheet1").Cells.ClearContents
不会删除单元格,并且会避免#REF!
错误。
答案 1 :(得分:1)
你可以使用INDIRECT解决你的宏删除行
Time=OFFSET(INDIRECT("Sheet4!$A$2"),0,0,COUNTA(Sheet4!$A:$A)-1)
这样,Sheet4!$ A $ 2不是单元格引用,而是文本字符串,因此在删除单元格时它不会更改为#Ref。 INDIRECT创建一个单元格引用,因此无论删除多少个单元格,它都将始终指向A2。