VBA预期“=”

我想在VBA中做一个简单的For循环,按照文档https://msdn.microsoft.com/en-us/library/5z06z1kb.aspx

但是,我在这一行中得到一个错误:

 For iiii As Integer = 1 To 20 

它说我在这一行有一个语法错误,但我不明白为什么当我写它就像例子。

整个循环是这样的:

 For iiii As Integer = 1 To 20 worksheet.Range("B1:B20").Value = "=getSalesData(A" & iiii & ")" Next iiii 

这里有几件事情正在进行。 首先,For Each … Next语句是VB.Net风格,而不是VBA。 其次,你迭代循环20次,但是每次都把公式放在B1:B20中。 您可以每次将公式放入一个单元格中。

 Dim iiii As long For iiii = 1 To 20 worksheet.Range("B" & iiii).Formula = "=getSalesData(A" & iiii & ")" Next iiii 

请注意,我已经使用Range .Formula属性,而不是Range .Value属性来分配公式。 如果你明确地告诉Excel你正在提供一个公式,那么这就是你得到的。 如果单元格被格式化为文本,而您没有指定Range .Formula属性,则会获得一个单元格,其中包含=getSalesData(A1)作为文本string。 只要您可以或者承受让Excel为您做出决定的后果,请具体说明。

最后,循环实际上是不必要的。 您可以在没有循环的情况下批量加载公式。

 worksheet.Range("B1:B20).Formula = "=getSalesData(A1)" 

这会将公式更改为= getSalesData(A1),= getSalesData(A2),= getSalesData(A3)等,因为它填充到B1:B20中。

VBA不是VB.Net

在VB.Net中,如果来自C ++或Java,则可以将variables声明和控制结构混合起来,这种方式看起来很自然。 在VBA中,你不能。 你需要

 Dim iiii As integer 'typically at top of sub or function For iiii = 1 To 20 worksheet.Range("B1:B20").Value = "=getSalesData(A" & iiii & ")" Next iiii