我在循环中使用了Evaluate(),除了整个循环中的第一个求值之外,一切都很顺利。
RowBegin = 98
For RowCount = RowBegin To RowBegin + 23 'Total 24 rows per site per day
If (RowCount Mod 4 <> 1) Then
Cells(RowCount, 6).Value = Evaluate(Cells(RowCount, 10).Value)
Cells(RowCount, 7).Value = Evaluate(Cells(RowCount, 11).Value)
End If
Next RowCount
请注意,我会跳过4行中的1行,因为我有一个公式。除了第一个之外,所有的Evaluate()都能正常工作:
Evaluate(Cells(98, 10).Value)
这个显示#REF错误。我仔细检查了配方,没关系。实际上,即使是同一循环中的下一个也可以工作:
Evaluate(Cells(98, 11).Value)
这是我放入细胞(98,10)的公式:
='R:\20180220\[Filename.xlsb]Summary'!$D$2
这是我放入Cell(98,11)的公式:
='R:\20180220\[Filename.xlsb]Summary'!$D$3
但是,如果我将代码修改为:
RowBegin = 98
For RowCount = RowBegin To RowBegin + 23 'Total 24 rows per site per day
If (RowCount = RowBegin) Then
Cells(RowBegin, 6).Value = Evaluate(Cells(RowBegin, 10).Value)
Cells(RowBegin, 7).Value = Evaluate(Cells(RowBegin, 11).Value)
End If
If (RowCount Mod 4 <> 1) Then
Cells(RowCount, 6).Value = Evaluate(Cells(RowCount, 10).Value)
Cells(RowCount, 7).Value = Evaluate(Cells(RowCount, 11).Value)
End If
Next RowCount
然后一切正常。
陌生人,这也有效:
RowBegin = 98
For RowCount = RowBegin To RowBegin + 23 'Total 24 rows per site per day
If (RowCount = RowBegin) Then
Cells(RowBegin, 7).Value = Evaluate(Cells(RowBegin, 11).Value)
End If
If (RowCount Mod 4 <> 1) Then
Cells(RowCount, 6).Value = Evaluate(Cells(RowCount, 10).Value)
Cells(RowCount, 7).Value = Evaluate(Cells(RowCount, 11).Value)
End If
Next RowCount
请注意,在第一个IF中,它实际上不会触及Cells(RowCount,6)!
我正在挠头,因为我认为第一段代码和第二段完全相同(因为当RowCount = 98时,它不会被跳过)。它与循环或Mod运算符有什么关系吗?
答案 0 :(得分:1)
我认为它第一次打开外部引用 - 但不及时 - 并抛出错误,然后从那时起就可以了。因此IF
工作而不是ELSEIF
的原因是因为当您使用IF
时它再次重做它,而ELSEIF
它没有。这解释了所有奇怪的行为。只需在那里保留一条虚线即可打开它,如:
RowBegin = 98
Cells(RowBegin, 6).Value = Evaluate(Cells(RowBegin, 10).Value) ' Dummy
For RowCount = RowBegin To RowBegin + 23 'Total 24 rows per site per day
If (RowCount Mod 4 <> 1) Then
Cells(RowCount, 6).Value = Evaluate(Cells(RowCount, 10).Value)
Cells(RowCount, 7).Value = Evaluate(Cells(RowCount, 11).Value)
End If
Next RowCount