打破评估vba
我一直在网上search,试图找出使用评估是什么。 我从msdn得到的是:“返回”应用于“列表中的对象的expression式。 我不知道这是什么意思。
我问的原因是因为我已经给了一段代码,我试图从中理解一些逻辑。 为什么这样写? 使用评估而不是更传统的方法有什么优势? 什么是一长串嵌套函数的正确语法?
这是我的代码示例:
With Range("B1", Cells(Rows.Count, "B").End(xlUp)) .Value = Evaluate("Index(If(Left(Trim(" & .Address & "),1)=""."",Replace(Trim(" & .Address & "),1,1,""""),Trim(" & .Address & ")),)") End With
有人能帮我解决这个问题,并从中解脱出来吗? 它应该删除主要时期,并摆脱列b中所有单元格中的多余空间。 我的问题是,只有运行两次才有效。 如果我可以从中得出一些结论,那么我可以通过操纵它来使其正常工作。
额外的信用,如果我想通过相同的范围,并删除所有破折号(“ – ”),我将如何构build这样的陈述?
我真的很想学习。 任何帮助赞赏。
好的在这里:
Evaluate
告诉应用程序在这种情况下评估一个函数。
该函数是"Index(If(Left(...
包含一些dynamic组件( .Address
))的string连接,因为它应用于整个范围:
Range("B1", Cells(Rows.Count, "B").End(xlUp))
实际上,这样做的目的是评估该范围内每个单元格的公式,但仅将公式的评估值写入每个单元格。
相当于用公式填充范围,然后对该范围执行复制+粘贴特殊(仅限值)。 这在内存和耗时的过程中显然更昂贵,特别是对于更大范围的对象。
我个人不赞成这种做法,但这主要是我个人的偏好。
在这种情况下,优势在于可以在一个语句中填充整个单元格 – 可以是10个单元格或10,000个单元格或1,048,576个单元格(在Excel 2007+中)。
另一种方法是做一个For/Next
循环(这在内存方面是昂贵的,因此在大范围内运行速度很慢),即使你正在对内存中的数组进行循环并将结果数组写入工作表,I认为使用像这样的代码单个语句是有一定的优雅。