打破评估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认为使用像这样的代码单个语句是有一定的优雅。