VBA预期的“=”

问题描述:

我试图做VBA简单For循环,按照文档https://msdn.microsoft.com/en-us/library/5z06z1kb.aspxVBA预期的“=”

不过,我在这条线得到一个错误:

For iiii As Integer = 1 To 20 

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

整个循环是像这样:

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

这就是VB.Net语法。在VBA中,你不能在线声明变量。所以你必须首先声明iiii as Integer,然后执行'For iii = 1 to 20'。 – RBarryYoung

+0

VBA是一种与VB(也称为VB.NET)完全不同且更古老的语言。首字母缩写词VB曾经一次用于识别现在称为VB6或经典VB的内容,但微软在2003年重新命名了该缩写词。 –

+1

您应该使用'worksheet.Range(“B1:B20”)。FORMULA =“= getSalesData(A”&iiii&“)”'。如果接收单元被格式化为文本,则最终可能会有一个看起来像您的公式的文本字符串。 – Jeeped

这里有一些事情正在进行。首先,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 property而不是Range .Value property分配公式。如果你明确地告诉Excel你提供了一个公式,那么这就是你得到的。如果单元格被设置为文本格式,并且您没有指定Range .Formula属性,则会获得一个文本字符串为=getSalesData(A1)的单元格。只要您可以或者承受让Excel为您做出决定的后果,请具体说明。

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

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

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

VBA不VB.Net

在VB.Net你可以混合变量声明和控制结构中,似乎很自然,如果你的方式来自C++或Java。在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 
+0

当我这样做时,值是从20开始而不是1开始的,是否有理由? 例如,单元格“B1”是'= getSalesData(A20)'而不是'A1' –

+1

循环是否必需?将相对单元格引用的公式填入B1:B20一次就足够了。 – Jeeped

+0

@Jeeped - 好。尽管如此,OP需要知道VBA与VB.Net的语法,因为它们确实需要循环。 –