我对这段代码有一个问题,我专门编写该代码是为了从 3 个关联的列中“加载”已创建的图表中的数据,如下所示:
Data1 X1 Y1
Data2 X2 Y2
Data3 X3 Y3
它的预期行为非常简单,它选择事件单元格,并进入循环: 选择工作表的第一个图形,评估事件单元格是否不为空,如果是,则应该跳出循环并结束宏,如果不是,则向其中添加新系列,将 Y 作为横坐标值并将 X 作为纵坐标值,增加一个跟踪值,该值允许增加图形中下一个系列的数量(它在循环外初始化为 1),将事件单元格的行更改为紧邻下面的行。
问题是它永远不会超出循环(并最终崩溃,因为你不能向图中添加超过 256 个系列,我用 if 条件改进了另一个版本中的代码以使其更好,它有效;但仍然添加空系列;删除起来非常繁琐,如果留在那里可能会弄乱东西)。
条件:Do While Not IsEmpty(Range("A1")) 似乎无法正确评估。 我尝试使用 Do While Not IsEmpty(Range("A1").value) 代替,或 Do While IsEmpty(Range("A1"));执行 While Not IsEmpty(Selection) (发送回有关全局的错误),我尝试了很多其他操作,但我认为我的值类型没问题,它是一个 bool 值,所以它应该按原样工作。 我还尝试了一个新的工作簿,其中有一张新工作表,只有一行,以确保之前没有任何单元格被弄乱,并且会改变它们的状态,这样它们对于程序来说就不会是空的, 但实际上,当我思考最明显的错误时,我仍然无法获得正确的行为。
Sub ScatterSeries()
ActiveCell.Offset(0, 0).Range("A1").Select
Serie = 1
Do While Not IsEmpty(Range("A1"))
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(Serie).Name = ActiveCell
ActiveChart.SeriesCollection(Serie).XValues = ActiveCell.Offset(0, 2)
ActiveChart.SeriesCollection(Serie).Values = ActiveCell.Offset(0, 1)
Serie = Serie + 1
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
End Sub
我读过一些类似的引用资料https://www.udemy.com/blog/excel-vba-do-while/或http://www.fontstuff.com/ebooks/free/fscodeloops.pdf但我看不到我在做什么不同的事情,这会导致程序出错。 有人可以给我对此的见解吗?我现在感觉自己真的很傻。 谢谢。
(我必须说,我是 vba 的初学者,所以我可能犯了非常明显的错误,我只是运行一些操作来查看宏中会出现什么,然后使用此处示例中读取的代码片段进行调整在那里(我仍然计划正确学习该语言,但我必须解决今天的问题......:/)
最佳答案
IsEmpty() 在 VBA 中用于检查变量是否已分配属性,而不是检查单元格是否为空。此外,您的偏移方法未正确声明。
使用这样的东西:
Sub ScatterSeries()
Range("A1").Activate
Serie = 1
While Not ActiveCell = ""
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(Serie).Name = ActiveCell.Value
ActiveChart.SeriesCollection(Serie).XValues = ActiveCell.Offset(0, 2).Value
ActiveChart.SeriesCollection(Serie).Values = ActiveCell.Offset(0, 1).Value
Serie = Serie + 1
ActiveCell.Offset(1, 0).Activate
Wend
End Sub
此外,您应该始终指定范围对象的 .Value 属性(是的,我知道这是 Range 对象的默认方法),但是当您测试值的条件时,您需要确保它绝对是只看值(value),不看其他。
关于vba - Do While Not IsEmpty(Range ("A1")) 条件评估失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26885727/